Невронните мрежи са една от най-вълнуващите и бързо развиващи се области в света на изкуствения интелект (AI). Те са в основата на много модерни приложения, като разпознаване на реч, компютърно зрение и обработка на естествен език. В тази статия ще разгледаме основните концепции на невронните мрежи и как да ги реализираме на практика, използвайки езика за програмиране Python и популярната библиотека с отворен код TensorFlow.

Какво представляват невронните мрежи?

Невронните мрежи са модели, вдъхновени от начина, по който функционира човешкият мозък. Те се състоят от големи мрежи от взаимосвързани „неврони“ или възли, организирани в слоеве. Всеки неврон получава входни данни, извършва някакви изчисления върху тях и предава резултата на невроните в следващия слой. Чрез настройване на силата на връзките (теглата) между невроните, невронната мрежа може да се научи да разпознава шаблони и да прави предсказания върху нови данни.

Основните компоненти на една невронна мрежа са:

  • Входен слой: Получава суровите входни данни, обикновено под формата на числа или вектори.
  • Скрити слоеве: Един или повече междинни слоеве, където се извършва голяма част от изчисленията. Всеки слой трансформира изхода от предишния слой.
  • Изходен слой: Произвежда крайния резултат от мрежата, който може да бъде например класификация или предсказание.
  • Активационна функция: Нелинейна функция (напр. ReLU или sigmoid), приложена към изхода на всеки неврон, която му позволява да моделира сложни зависимости.

Обучението на невронна мрежа обикновено се извършва чрез алгоритъма обратно разпространение (backpropagation). При него мрежата прави предсказания върху обучителните данни, сравнява ги с действителните етикети и коригира теглата на невроните, за да минимизира грешката. Този процес се повтаря итеративно, докато мрежата достигне приемливо ниво на точност.

Изграждане на невронни мрежи с Python и TensorFlow

Да видим как можем да създадем и обучим невронна мрежа с Python и библиотеката за машинно обучение TensorFlow. Ще използваме класическия набор от данни MNIST, който съдържа картинки на ръкописни цифри от 0 до 9.

Първо, нека импортираме необходимите библиотеки и заредим данните от MNIST:


import tensorflow as tf
from tensorflow import keras

# Load the data from MNIST
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

Данните се състоят от 60000 снимки с размер 28×28 пиксела за обучение и 10000 за тест. Етикетите са целите числа между 0 и 9.
Следващата стъпка е да нормализираме пикселните стойности от диапазона [0, 255] до [0, 1] и да конвертираме етикетите в one-hot encoding:


# Normalize the values
x_train = x_train / 255.0
x_test = x_test / 255.0

# Convert into one-hot encoding
y_train = keras.utils.to_categorical(y_train)  
y_test = keras.utils.to_categorical(y_test)

Сега сме готови да дефинираме архитектурата на нашата невронна мрежа, използвайки високото ниво на TensorFlow – Keras:


# Defininf the model
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])

Моделът се състои от:

  1. Входен слой, който трансформира 2D снимките в 1D вектор с 784 елемента (28 * 28).
  2. Скрит слой с 128 неврона и ReLU активация.
  3. Изходен слой с 10 неврона (по един за всяка цифра) и softmax активация, която връща вероятностите за всеки клас.

След това конфигурираме модела за обучение, като избираме оптимизатора Adam, функцията за загуба categorical cross-entropy и метриката за точност:


model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Най-накрая обучаваме модела върху тренировъчните данни за 5 епохи, използвайки размер на партидата (batch size) 32:


model.fit(x_train, y_train, epochs=5, batch_size=32)

След обучението можем да оценим представянето на модела върху тестовите данни:


test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_acc:.3f}')

На моята машина получавам точност около 97.8% върху тестовите данни, което е доста добър резултат за такъв простичък модел.

Разбира се, това е само най-основното въведение в невронните мрежи. Съществуват много видове архитектури (CNN, RNN, Transformers и т.н.), техники за регуляризация (dropout, batch normalization), стратегии за оптимизация и т.н., но тези теми ще оставим за бъдещи статии.

Надявам се този материал да ви е бил полезен и интересен! Не се колебайте да експериментирате и да задълбочите знанията си за невронните мрежи и AI. Python и библиотеки като TensorFlow и PyTorch правят разработването на модерни модели за машинно обучение по-лесно от всякога.

Категории:

AI програмиране,

Последно обновяване: май 3, 2024