Skip to content

Latest commit

 

History

History
95 lines (54 loc) · 7.88 KB

File metadata and controls

95 lines (54 loc) · 7.88 KB

Въведение в невронните мрежи: Перцептрон

Един от първите опити за създаване на нещо подобно на съвременна невронна мрежа е направен от Франк Розенблат от Корнелската аеронавтична лаборатория през 1957 г. Това е хардуерна реализация, наречена "Mark-1", предназначена да разпознава примитивни геометрични фигури като триъгълници, квадрати и кръгове.

Frank Rosenblatt The Mark 1 Perceptron

Изображения от Wikipedia

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

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

The New York Times пише за перцептрона по онова време: ембрион на електронен компютър, който [Военноморските сили] очакват да може да ходи, говори, вижда, пише, възпроизвежда себе си и да бъде съзнателен за своето съществуване.

Модел на перцептрон

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

y(x) = f(wTx)

където f е стъпковата активационна функция

Обучение на перцептрона

За да обучим перцептрон, трябва да намерим вектор на теглата w, който класифицира повечето стойности правилно, т.е. води до най-малката грешка. Тази грешка E се дефинира чрез критерия на перцептрона по следния начин:

E(w) = -∑wTxiti

където:

  • сумата се взема за онези точки от обучаващите данни i, които водят до неправилна класификация
  • xi е входните данни, а ti е -1 или +1 съответно за отрицателни и положителни примери.

Този критерий се разглежда като функция на теглата w, и трябва да го минимизираме. Често се използва методът градиентен спуск, при който започваме с някакви начални тегла w(0), а след това на всяка стъпка актуализираме теглата според формулата:

w(t+1) = w(t) - η∇E(w)

Тук η е така наречената скорост на обучение, а ∇E(w) обозначава градиента на E. След като изчислим градиента, получаваме:

w(t+1) = w(t) + ∑ηxiti

Алгоритъмът на Python изглежда така:

def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):

    weights = [0,0,0] # Initialize weights (almost randomly :)
        
    for i in range(num_iterations):
        pos = random.choice(positive_examples)
        neg = random.choice(negative_examples)

        z = np.dot(pos, weights) # compute perceptron output
        if z < 0: # positive example classified as negative
            weights = weights + eta*weights.shape

        z  = np.dot(neg, weights)
        if z >= 0: # negative example classified as positive
            weights = weights - eta*weights.shape

    return weights

Заключение

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

🚀 Предизвикателство

Ако искате да опитате да създадете свой собствен перцептрон, опитайте тази лаборатория в Microsoft Learn, която използва Azure ML designer.

Преглед и самостоятелно обучение

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

Ето и интересна статия за перцептроните.

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