Машинное обучение — основы нейронных сетей

машинное обучение искусственный интеллект

основное введение

Самым основным компонентом нейронной сети является модель нейрона.Когда входное значение превышает порог нейрона, нейрон активируется. Затем с помощью функции активации выходное значение может соответствовать 0 или 1.

Персептрон

Персептрон состоит из двух слоев нейронов. Входной слой получает данные, а выходной слой может выводить 0 или 1 через функцию активации. Следовательно, персептрон может выполнять некоторые основные логические операции. Давайте посмотрим на математические принципы.

Математика персептронов

формула: f(x)=sign(w*x+b)f(x)=sign(w*x+b)

в

sign(x)={1x00x<0\begin{aligned} sign(x)=\left\{ \begin{aligned} 1 &&x \geq 0\\ 0 &&x<0 \end{aligned} \right. \end{aligned}

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 (алгоритм обратного распространения) Предположим, что выход нейронной сети для обучающей выборки равенy^jk=f(бетаjθj)\hat{y}_{j}^{k}=f(\beta_j-\theta_j)Тогда среднеквадратическая ошибка:Ek=12j=1l(y^jkyjk)2E_k=\frac{1}{2}\sum_{j=1}^{l}(\hat{y}_j^k-y_j^k)^2Алгоритм BP по-прежнему является алгоритмом, основанным на градиентном спуске, и параметры корректируются в сторону отрицательного градиента.Цель состоит в том, чтобы уменьшить кумулятивную ошибку на обучающем наборе.E=1mk=1mEkE=\frac{1}{m}\sum_{k=1}^mE_kминимизировать. Основные шаги заключаются в вычислении выходных данных --- > вычислении элемента градиента выходного слоя --- > вычислении элемента градиента скрытого слоя --- > а затем обновлении весов и пороговых значений в соответствии с формулой обновления, поэтому это называется алгоритмом обратного распространения.Что касается более поздних тем глубокого обучения, таких как вывод формулы обновления для весов и пороговых значений, я расскажу об этом позже, поэтому я кратко представлю это здесь.

недостаток

Обратное распространение часто склонно к переоснащению, и стратегии «ранней остановки» или «регуляризации» обычно используются для предотвращения переобучения.

Наконец, практический пример

Использование многослойных персептронов в наборах данных о вине для анализа плюсов и минусов вина

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_)

在这里插入图片描述