Недавно я увидел в Интернете очень хороший перевод «Учебное пособие по нейронной сети, которое может понять Xiaobai: от принципа до оптимизации — это так просто», которое является сокровищем. Внимательно прочитав, я обнаружил, что некоторые переводы не на месте. Потом я обратился к исходному тексту и перечитал его еще раз, и мне показалось, что исходный текст несколько разочаровывает.Первая половина объяснения была проста и проста, а вторая половина объяснения была недостаточно подробной и заканчивалась Спешите Автор, кажется, торопится лечь спать. Поэтому я решил снова перевести оригинальный текст для читателей.
Перевод выглядит следующим образом:
Краткое введение в то, как работают нейронные сети и как реализовать их с нуля на Python.
Вас может удивить, если «нейронная сеть» на самом деле не сложна. На самом деле «нейронные сети» зачастую проще, чем вы думаете.
Эта статья предназначена для начинающих и предполагает, что у вас нет основы машинного обучения.Мы с самого начала научимся пользоватьсяPythonРеализовать нейронную сеть.
1. Основные строительные блоки: нейроны
Во-первых, мы должны обсудитьнейроны, который является базовой единицей нейронной сети.Нейрон принимает несколько входных данных, выполняет над ними некоторые математические операции и выдает результат.. На изображении ниже показан нейрон, получающий 2 входа:
Здесь происходят три вещи: Во-первых, каждыйвходить(вход) оба умножаются на одинВеса w (weight):
Затем все взвешенные входные данные суммируются и добавляются скомпенсировать b (bias):
Наконец, добавьте ихипройти кфункция активации(функция активации):
здесьфункция активацииРоль состоит в том, чтобы преобразовать неограниченный вход в предсказуемый результат. Обычная функция активациисигмовидная функция:
Выходное значение функции активации будет попадать только в интервал (0,1). Вы можете думать об этом каксжатый в:
- Преобразование бесконечно малых отрицательных чисел в бесконечно близкие к 0
- Преобразование бесконечных положительных чисел в бесконечно близкие к 1
простой пример
Предположим, у нас есть применениеНейрон функции активации, он может получать два входа, ниже егоВесаикомпенсировать:
w = [0, 1]
векторное представление .
Теперь мы входим. мы будем использоватьскалярное произведениеКратко поясню:
Этот нейрон получает вход, учитывая вывод. Вот и все! Этот процесс передачи ввода вперед для получения вывода становитсяпрямая связь.
написать нейрон
Время реализовать нейрон! мы будем использоватьNumpy(популярная и мощная научная библиотека для подсчета), чтобы помочь нам реализовать математические формулы:
import numpy as np
def sigmoid(x):
# Our activation function: f(x) = 1 / (1 + e^(-x))
return 1 / (1 + np.exp(-x))
class Neuron:
def __init__(self, weights, bias):
self.weights = weights
self.bias = bias
def feedforward(self, inputs):
# Weight inputs, add bias, then use the activation function
total = np.dot(self.weights, inputs) + self.bias
return sigmoid(total)
weights = np.array([0, 1]) # w1 = 0, w2 = 1
bias = 4 # b = 4
n = Neuron(weights, bias)
x = np.array([2, 3]) # x1 = 2, x2 = 3
print(n.feedforward(x)) # 0.9990889488055994
Знаете этот номер? мы получили тот же результат
2. Объединение нейронов в нейронную сеть
Нейронные сетичто это? По сути, это не что иное, как пучок нейронов, соединенных между собой. Вот как выглядит простая нейронная сеть:
Сеть имеет 2 входа, скрытый слой с 2 нейронами (и), и выходной слой с 1 нейроном (). Пожалуйста, обрати внимание,Вход поступает изиВыход — это нейронная сеть.
Возьми каштан: прямая связь
Возьмите нейронную сеть на рисунке выше в качестве примера и предположите, что все нейроны имеют одинаковые веса., такое же смещение, и то же самоефункция активации. использоватьпредставляют нейронные выходы, которые они представляют.
Если мы войдем,Что случится?
когда вход, выход этой нейронной сети, не правда ли просто?
Нейронная сеть может иметьлюбой номерслои, каждый слой может иметьпроизвольные данныенейронов. Основная идея та же: передать вход нейрону вперед, а результат получить позже.
Для удобства в остальной части этой статьи будет использоваться нейронная сеть, показанная выше.
Написание нейронной сети: прямая связь
Давайте реализуем нейронную сеть с прямой связью. Вот изображение этой сети, просто для справки:
import numpy as np
# ... code from previous section here
class OurNeuralNetwork:
'''
A neural network with:
- 2 inputs
- a hidden layer with 2 neurons (h1, h2)
- an output layer with 1 neuron (o1)
Each neuron has the same weights and bias:
- w = [0, 1]
- b = 0
'''
def __init__(self):
weights = np.array([0, 1])
bias = 0
# The Neuron class here is from the previous section
self.h1 = Neuron(weights, bias)
self.h2 = Neuron(weights, bias)
self.o1 = Neuron(weights, bias)
def feedforward(self, x):
out_h1 = self.h1.feedforward(x)
out_h2 = self.h2.feedforward(x)
# The inputs for o1 are the outputs from h1 and h2
out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))
return out_o1
network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421
Мы снова получаем,Идеально!