Един от първите опити за създаване на нещо подобно на съвременна невронна мрежа е направен от Франк Розенблат от Корнелската аеронавтична лаборатория през 1957 г. Това е хардуерна реализация, наречена "Mark-1", предназначена да разпознава примитивни геометрични фигури като триъгълници, квадрати и кръгове.
![]() |
![]() |
Изображения от 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.
Ето и интересна статия за перцептроните.
В този урок реализирахме перцептрон за задача за двоична класификация и го използвахме за класификация между две ръкописни цифри. В тази лаборатория се изисква да решите проблема с класификацията на цифри изцяло, т.е. да определите коя цифра най-вероятно съответства на дадено изображение.


