основное введение
Самым основным компонентом нейронной сети является модель нейрона.Когда входное значение превышает порог нейрона, нейрон активируется. Затем с помощью функции активации выходное значение может соответствовать 0 или 1.
Персептрон
Персептрон состоит из двух слоев нейронов. Входной слой получает данные, а выходной слой может выводить 0 или 1 через функцию активации. Следовательно, персептрон может выполнять некоторые основные логические операции. Давайте посмотрим на математические принципы.
Математика персептронов
формула:
в
x — это вход, w — вес, b — смещение (термин смещения)
Математический принцип очень прост, затем начните выполнять некоторые основные логические операции.
- И операция
- операция ИЛИ
- НЕ операция
- исключающее ИЛИ
1. И операция
x1 | x2 | x1 AND X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Соответствующее неравенство:
b<0
w2+b<0
w1+b<0
w1+w2+b>=0
Подводя итог: пока вес удовлетворяет w1, w2-b, операция И может быть реализована;
# 1.与运算
import numpy as np
def AND(x1,x2):
x=np.array([x1,x2])
w=np.array([1,1])
b=-1.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(AND(1,1))
print(AND(0,1))
print(AND(1,0))
print(AND(0,0))
2. Операция ИЛИ
x1 | x2 | x1 OR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Соответствующее неравенство: ИЛИ
b<0
w2+b>=0
w1+b>=0
w1+w2+b>=0
Подводя итог: пока вес удовлетворяет w1, w2>=-b, операция И может быть реализована;
def OR(x1,x2):
x=np.array([x1,x2])
w=np.array([1,1])
b=-0.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(OR(1,1))
print(OR(0,1))
print(OR(1,0))
print(OR(0,0))
3. НЕ операция
x | NOT x |
---|---|
0 | 1 |
1 | 0 |
Соответствующее неравенство:
b>=0
w+b<0
Подводя итог: пока вес удовлетворяет w=0, неоперация может быть реализована;
def NOT(x):
x=np.array([x])
w=np.array([-1])
b=0.5
y=np.sum(x*w)+b
if(y>=0):
return 1
elif(y<0):
return 0
print(NOT(1))
print(NOT(0))
4. Операция исключающее ИЛИ
x1 | x2 | x1 XOR X2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Соответствующее неравенство:
b<0
w2+b>=0
x1+b>=0
w1+w2+b<0
Это неравенство не имеет решения, так что это недостаток однослойного персептрона, который не может выполнять операцию исключающее ИЛИ.Итак, в настоящее время нам нужно использовать многослойный персептрон для решения этой проблемы.
#用多层感知机来解决这个问题
def XOR(x1,x2):
a=NOT(x1)
b=NOT(x2)
X1=AND(a,x2)
X2=AND(x1,b)
Y=OR(X1,X2)
print(Y)
XOR(0,0)
XOR(1,1)
XOR(0,1)
XOR(1,0)
Из этих примеров мы знаем, что однослойный персептрон может решать только линейно разделимые задачи, а многослойный персептрон (нейронная сеть) должен использоваться для решения нелинейных разделимых задач.
обучение нейронных сетей
Если вам нужно обучить многослойную сеть, вам нужен более мощный алгоритм обучения --- алгоритм BP (алгоритм обратного распространения) Предположим, что выход нейронной сети для обучающей выборки равенТогда среднеквадратическая ошибка:Алгоритм BP по-прежнему является алгоритмом, основанным на градиентном спуске, и параметры корректируются в сторону отрицательного градиента.Цель состоит в том, чтобы уменьшить кумулятивную ошибку на обучающем наборе.минимизировать. Основные шаги заключаются в вычислении выходных данных --- > вычислении элемента градиента выходного слоя --- > вычислении элемента градиента скрытого слоя --- > а затем обновлении весов и пороговых значений в соответствии с формулой обновления, поэтому это называется алгоритмом обратного распространения.Что касается более поздних тем глубокого обучения, таких как вывод формулы обновления для весов и пороговых значений, я расскажу об этом позже, поэтому я кратко представлю это здесь.
недостаток
Обратное распространение часто склонно к переоснащению, и стратегии «ранней остановки» или «регуляризации» обычно используются для предотвращения переобучения.
Наконец, практический пример
Использование многослойных персептронов в наборах данных о вине для анализа плюсов и минусов вина
import pandas as pd
wine = pd.read_csv('./wine.csv', names = ["Cultivator", "Alchol", "Malic_Acid", "Ash", "Alcalinity_of_Ash", "Magnesium", "Total_phenols", "Falvanoids", "Nonflavanoid_phenols", "Proanthocyanins", "Color_intensity", "Hue", "OD280", "Proline"])
wine.head(10)
wine.describe().transpose()
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import classification_report,confusion_matrix
X = wine.drop('Cultivator',axis=1)
y = wine['Cultivator']
X_train, X_test, y_train, y_test = train_test_split(X, y)
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
mlp = MLPClassifier(hidden_layer_sizes=(13,13,13),max_iter=500)
mlp.fit(X_train,y_train)
predictions = mlp.predict(X_test)
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
print(len(mlp.coefs_))
print(mlp.intercepts_)