Человеческий мозг всегда был большой областью исследований для ученых. Как мы знаем, мозг - это самый важный орган человеческого тела, который делает нас функциональными и, что наиболее важно, обеспечивает ИНТЕЛЛЕКТ.

Человечество всегда рассматривало природу как великий источник вдохновения для всех своих изобретений. Итак, в начале 1940-х годов два великих ума Уоррен Маккалок и Уолтер Питтс пытались имитировать функциональность наиболее фундаментальной части, сеть которой отвечает за функции мозга, т. Е. НЕЙРОН.

Они представили первую в истории архитектуру искусственной нейронной сети (ИНС), позже известную как искусственный нейрон.

Давайте узнаем больше о биологическом нейроне, чтобы нам было легко сопоставить эти термины с искусственным нейроном:

Нейрон может принимать несколько входных сигналов через ветви, известные как дендриты. Толщина дендритов показывает, насколько важен этот сигнал для запуска или активации нейрона. До тех пор, пока не будет достаточно входного сигнала, нейрон не срабатывает / не активируется, то есть не отправляет выходной сигнал.

Входные данные от дендритов обрабатываются нейроном (некоторые биохимические вычисления выполняются в ядре). Ветвь, которая передает эти выходные данные от нейрона, называется Axon. Этот аксон далее разделяется и известен как Телодендрия. Небольшая структура на конце телодендрии известна как синаптические терминалы, также известные как синапсы.

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

Простой искусственный нейрон активирует свой выход, когда активны более определенного числа его входов.

здесь этот нейрон срабатывает только тогда, когда оба входа I1 и I2 активны. С этими простыми нейронами возможны только логические вычисления.

Перцептрон

В 1958 году Фрэнк Розенблатт придумал алгоритм, который будет играть жизненно важную роль в дальнейших исследованиях ИНС, известный как Персептрон.

Персептрон также известен как линейная пороговая единица (LTU) или пороговая логическая единица (TLU).

Прежде чем мы перейдем к функциям Perceptron, давайте узнаем о наших данных, которые мы собираемся передать в наш LTU.

D: обучающий набор данных с Xi в качестве обучающих экземпляров и Yi в качестве выходных меток

W: матрица весов, которая содержит вектор весов, связанный с каждым i-м экземпляром обучающего набора данных.

Как работает Perceptron / LTU / TLU?

1. Мы передаем каждый экземпляр «D», то есть Xi, персептрону в качестве входных данных и вес, связанный с ним, то есть Wi, один за другим.

2. Вычисляет взвешенную сумму (Zi) каждого экземпляра (Xi) с соответствующим вектором весов Wi, т.е.

3. Инкапсулируйте взвешенную сумму с помощью ступенчатой ​​функции, то есть функции активации, для которой установлен порог; если взвешенная сумма (Zi) выше порога, она дает положительный результат, иначе отрицательный.

Здесь линии, соединяющие входной и вычислительный блок, называются вершинами / соединениями / ребрами, а Wj - это веса, связанные с каждым соединением.

Входной нейрон: каждый вход в LTU подается специальным типом нейрона, известным как сквозной нейрон, который передает входные данные как есть.

Это однослойная нейронная сеть, так как только один слой нейронов напрямую питается от входных нейронов.

Когда все нейроны в слое подключены к каждому нейрону в предыдущем слое (в данном случае нейроны предыдущего слоя являются входными нейронами), это называется полностью соединенным слоем или плотным слоем.

Это можно рассматривать как перспективу биологического нейрона, как показано ниже:

В LTU используются два типа ступенчатых функций:

1. Функции подписи

2. Функции Хевисайда

В основном функция Хевисайда используется в персептронах.

Как тренировать персептрон ??

Обучение перцептрона основано на Правиле Хебба.

Правило Хебба:

«Ячейки, которые стреляют вместе, соединяются вместе».

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

Обучение перцептрона также известно как обучение по Хеббу.

1. Сначала инициализируйте весовую матрицу «W» случайными значениями.

2. Установите постоянную скорость обучения (ῃ)

3. Отправляйте Си в LTU по одному и прогнозируйте результат; в случае ошибки мы обновляем веса соединений, что помогло бы предсказать правильный результат. Мы продолжаем делать это до тех пор, пока все наши точки не будут правильно классифицированы.

Подождите ... Неужели вы не думаете, что это похоже на какой-то алгоритм ????…. Подумай минутку ...

Хорошо, позволь мне сломать лед; его стохастический градиентный спуск (SGD).

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

Математически можно записать как

Работу этого Hebbian Learning можно понять из простого псевдокода:

Позвольте мне объяснить, что здесь только что произошло ...

1. Если Zi ‹0 для yi = 1, то мы увеличиваем вес связи между i-м входным нейроном и j-м выходным нейроном, то есть Wij.

2. Если Zi ›= 0 для yi = 0, то мы уменьшаем вес связи между i-м входным нейроном и j-м выходным нейроном, то есть Wij.

3. Когда мы автоматически увеличиваем Wij, мы увеличиваем взвешенную сумму (Zi), поэтому мы превышаем порог, установленный в пошаговой функции, и получаем желаемый положительный результат.

4. Когда мы автоматически уменьшаем Wij, мы уменьшаем взвешенную сумму (Zi), поэтому мы превышаем порог, установленный в пошаговой функции, и получаем желаемый отрицательный результат.

Sklearn дает реализацию Perceptron:



Простое применение персептрона на наборе данных ириса для предсказания цветка сетоса, используя только длину лепестка и ширину лепестка:

Использование перцептрона Склирна

import warnings
warnings.filterwarnings("ignore")
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
iris = load_iris()
X = iris.data[:, (2, 3)] # petal length, petal width
y = (iris.target == 0).astype(np.int)
per_clf = Perceptron()
per_clf.fit(X, y)
>>
Perceptron(alpha=0.0001, class_weight=None, eta0=1.0, fit_intercept=True,max_iter=None, n_iter=None, n_jobs=1, penalty=None, random_state=0,shuffle=True, tol=None, verbose=0, warm_start=False)
per_clf.score(X,y)
>>1.0

Использование SGDClassifier -

import warnings
warnings.filterwarnings("ignore")
import numpy as np
from sklearn.datasets import load_iris
from sklearn import linear_model
iris = load_iris()
X = iris.data[:, (2, 3)] # petal length, petal width
y = (iris.target == 0).astype(np.int)
sgd=linear_model.SGDClassifier(loss="perceptron",
                    learning_rate="cons tant", eta0=1,penalty=None)
sgd.fit(X, y)
>>SGDClassifier(alpha=0.0001, average=False, class_weight=None,       epsilon=0.1,eta0=1, fit_intercept=True, l1_ratio=0.15, learning_rate='constant',loss='perceptron', max_iter=None, n_iter=None, n_jobs=1,penalty=None, power_t=0.5, random_state=None, shuffle=True,tol=None, verbose=0, warm_start=False)
sgd.score(X, y)
>>1.0

Заключение:

Как будто теперь ясно, что Perceptron - это линейный классификатор. Простая модель нейрона может быть полезна только для логических вычислений, но персептроны можно использовать в качестве двоичных классификаторов и классификаторов с несколькими выходами.

Мы знаем, что логистическая регрессия находит линию / плоскость / гиперплоскость (границу решения), которая разделяет наши положительные и отрицательные точки; Таким же образом наш Персептрон находит ту же самую поверхность решения, но фундаментальное отличие состоит в том, что логистическая регрессия использует сигмовидную функцию, а Персептрон для этого использует ступенчатую функцию.

Другие отличия:

1. В LTU нет Squashing

2. Выходные данные, выдаваемые LTU, основаны исключительно на некоторых жестких пороговых значениях и не выводят вероятности классов.

Это основные причины, по которым логистическая регрессия предпочтительнее LTU.

Ограничения однослойного персептрона:

1. LTU не может решать такие проблемы, как классификации EX-OR.

2. Выходные значения LTU могут принимать только одно из двух значений (0 или 1).

Эти ограничения можно преодолеть с помощью многослойного персептрона (MLP).

Спасибо за прочтение!

Счастливого («глубокого») обучения…! :-)