|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Введение в нейронные сети: Перцептрон
Тест перед лекцией
Одной из первых попыток создать что-то похожее на современную нейронную сеть была работа Фрэнка Розенблатта из Корнельской аэрокосмической лаборатории в 1957 году. Это была аппаратная реализация под названием "Mark-1", предназначенная для распознавания простых геометрических фигур, таких как треугольники, квадраты и круги.
![]() |
![]() |
Изображения с Википедии
Входное изображение представлялось массивом из 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.
Вот интересная статья о перцептронах.
Задание
В этом уроке мы реализовали перцептрон для задачи бинарной классификации и использовали его для классификации двух рукописных цифр. В этой лабораторной работе вам предлагается решить задачу классификации цифр полностью, то есть определить, какая цифра наиболее вероятно соответствует данному изображению.

