Программирование нейросетей на языке C++

Jul 16, 2024

Лекция: Программирование нейросетей на языке C++

Введение

  • Цель: создать программу, которая угадывает цифры
  • Используемые инструменты: язык программирования C++

Основы нейросетей

  • Конфигурация: 5 входных нейронов, 1 скрытый слой с 2 нейронами, 2 выходных нейрона
  • Все нейроны связаны весами
    • Веса - обучаемые параметры
  • Нейроны смещения (обычно -1 или +1)

Вычисление взвешенной суммы

  • Линейная алгебра:
    • Взвешенные суммы (n00 * w000) + (n10 * w010) + (n20 * w020) + b00
  • Матричное умножение

Функции активации

  • Необходимы для нелинейных преобразований
  • Примеры функций активации:
    • Сигмоида: f(x) = 1 / (1 + e^(-x))
    • ReLU: f(x) = max(0, x)
    • Тангенс: f(x) = tanh(x)
  • Выбор функции активации зависит от задачи

Реализация классов в C++

  • Основные классы:
    • Network (нейросеть)
    • Matrix (матрицы)
    • ActivationFunctions (функции активации)
  • Методы класса Matrix:
    • init (инициализация)
    • rand (заполнение случайными числами)
    • mult (умножение)
  • Класс Network:
    • Переменные: количество слоев L, количество нейронов size, функции активации ACTS, веса W, смещения B, значения нейронов N, ошибки D
    • Методы класса: инициализация, прямая передача forward, обратное распространение ошибки backpropagation, обновление весов

Обучение нейросети

  • Метод градиентного спуска
    • Сдвиг весов: W = W - alpha * dE/dW
    • alpha - скорость обучения
  • Итерационный процесс обновления весов и смещений
  • Использование набора данных MNIST (цифры)
    • Сжатие данных в диапазоне 0 до 1
  • Подсчет производных функций активации

Реализация обучения

  • Считывание данных из MNIST
  • Прямое распространение: вычисление взвешенных сумм и применение функций активации
  • Обратное распространение ошибки: вычисление градиентов и обновление весов
  • Сохранение и чтение весов из файла

Тестирование и результаты

  • Нейросеть обучена на 99.3% правильных ответов (затрачено 12 минут)
  • Тестирование на цифрах MNIST показало высокую точность

Заключение

  • Написан пай приседале для визуализации и тестирования
  • Подробно рассматривались классы, методы и процессы, связанные с обучением нейросетей на C++

Замечания

  • Если были вопросы, оставить комментарий
  • Опрос на тему следующего видео