Главная
АИ #14 (249)
Статьи журнала АИ #14 (249)
Нейронная сеть на языке программирования С++

Нейронная сеть на языке программирования С++

Научный руководитель

Рубрика

Технические науки

Ключевые слова

нейронная сеть
обучение
C++

Аннотация статьи

В статье представлены общие сведения об архитектуре нейронных сетей, написанных языке программирования C++. Нейронная сеть, написанная на C++, показывает в полной мере ее обучение тем или иным действиям.

Текст статьи

Нейронная сеть (также искусственная нейронная сеть, ИНС, или просто нейросеть) – математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации биологических нейронных сетей – сетей нервных клеток живого организма.

Нейронная сеть состоит из большого числа нейронов, способных выполнять различного рода и сложности задачи. Так, на рисунке 1, представлена простейшая архитектура ИНС, состоящей одного нейрона входного слоя, трех нейронов скрытого слоя, а также нейрона выходного слоя.

image.png

Рис. 1. Архитектура простейшей нейронной сети

Один нейрон может выполнять простейшие вычисления, но основные функции нейросети обеспечиваются не отдельными нейронами, а соединениями между ними. Однослойный перцептрон представляет собой простейшую сеть, которая состоит из группы нейронов, образующих слой. Входные данные кодируются вектором значений, каждый элемент подается на соответствующий вход каждого нейрона в слое. В свою очередь, нейроны вычисляют выход независимо друг от друга. Размерность выхода (то есть количество элементов) равна количеству нейронов, а количество синапсов у всех нейронов должно быть одинаково и совпадать с размерностью входного сигнала.

Обучение нейронной сети – это процесс, в котором параметры нейронной сети настраиваются посредством моделирования среды, в которую эта сеть встроена. Тип обучения определяется способом подстройки параметров. Различают алгоритмы обучения с учителем и без учителя. Процесс обучения с учителем представляет собой предъявление сети выборки обучающих примеров. Каждый образец подается на входы сети, затем проходит обработку внутри структуры НС, вычисляется выходной сигнал сети, который сравнивается с соответствующим значением целевого вектора, представляющего собой требуемый выход сети. Данная схема обучения представлена на рисунке 2.

image.png

Рис. 2. Схема обучения нейронной сети, где НС – нейронная сеть, АО – анализатор ошибок

Основным методом обучения является градиентный спуск, который используется для минимизации ошибки, скорость которой задается непосредственно вручную (обозначают ее image.png).

Чтобы нейронная сеть начала свое обучение для этого необходима функция активации.

Функция активации в нейронных сетях – это математическая модель, заданная в виде функции, применяемая к выходному сигналу нейрона. Ее цель – внести нелинейность в модель, что позволяет сети обучаться и представлять сложные закономерности в данных. Без нелинейности нейронная сеть вела бы себя как линейная функция, независимо от количества слоев.

Функция активации решает, следует ли активировать нейрон или нет, путём вычисления взвешенной суммы и дальнейшего добавления к ней смещения. Существуют различные варианты функции активации, например: сигмовидная функция sigmoid, функция гиперболического тангенса tanh, функция максимизации значений ReLU.

Веса image.png и смещения image.png в нейронной сети – это регулируемые параметры, которые определяют, как сеть обрабатывает данные. Веса определяют силу связей между нейронами и фиксируют взаимосвязи между входными характеристиками и целевыми выходными значениями. Смещения обеспечивают гибкость заданной функции, что позволяет нейронам активироваться в ответ на различные входные условия. Таким образом, зная входные значения image.png, можно составить формулу для определения выходного значения для нейронной сети, состоящей из image.png количества нейронов.

image.png, (1)

C++ является классикой программирования, без которой ни один профессиональный программист не может выполнять задачи программирования. На ней также возможно написание простейшей нейронной сети, которая представлена ниже.

Для работы нейронной сети, написанной на C++ Builder, требуется подключение нужных библиотек, а именно: math.h, ctime, fstream, iostream (рис. 3).

image.png

Рис. 3. Подключаемые библиотеки C++

Далее, вводятся значения, необходимые для программирования и обучения нейронной сети (рис. 4).

image.png

Рис. 4. Значения, необходимые для работы нейронной сети

За nin обозначается нейрон входного слоя, n[100] – 100 нейронов скрытого слоя, nout – нейрон выходного слоя, w12[100] – инициализируемые 100 весов связи между входным и скрытым слоями нейронов, w23[100] – инициализируемые 100 весов связи между скрытым и выходным слоями нейронов, b – инициализируемые 100 смещения весов связи между входным и скрытым слоями нейронов, bout – смещение весов между скрытым и выходным слоем, alph – скорость (шаг) обучения.

Далее, пишется безразмерная функция readF(), позволяющая считывать значения с некоторого файла iksiki.txt, являющиеся входными x[i] и выходными значениями y[i], которым должна обучиться нейронная сеть (рис. 5).

image.png

Рис. 5. Функция для считывания текста с файла

Сама нейронная сеть представлена в виде функции десятичных чисел, рассчитываемая значения nin, n[100] и nout, рассчитываемая через функцию активации типа tanh, так как является самой оптимальной среди всех представленных выше функций и может охватывать больший диапазон значений. Функция выводит значение nout (рис. 6).

image.png

Рис. 6. Функция нейронной сети

Для наиболее качественного обучения, требуется инициализация весов. Инициализация представлена на рисунке 7 через функцию rand(), генерируя «случайные» числа, в безразмерной функции ini().

image.png

Рис. 7. Функция инициализации весов

Обучение нейронной сети представлено через функцию десятичных чисел teach(floaty_ns, floaty_zad) в виде градиентного спуска. Данная функция также обновляет веса, если значения, посчитанные нейросетью, не совпадают с заданными выходными значениями. Для обновления весов требуется производная функции активации, которая рассчитывается по следующей формуле:

image.png, (2)

Зная производную функции активации каждого слоя и задав скорость обучения alph, функция обновляет и инициализирует новые веса (рис. 8).

image.png

Рис. 8. Функция обучения ИНС методом градиентного спуска

После создания кнопки Button1, в нее закладывается расчет и построение графиков, выверенные через те функции, которые находятся вне данной кнопки. Для вывода значения функции network добавляется переменная out[i]. Через нее строится график Series1, который определяется нейронной сетью, когда Series2 строится по переменной y[i], являющейся заданной функцией (рис. 9).

image.png

Рис. 9. Код для построения графиков

Для того чтобы стереть графики в приложении, добавляется кнопка Button2, и пишется логическое равенство flag=false (рис. 10).

image.png

Рис. 10. Код для стирания графиков с приложения

Результатом будет являться построение функции в приложении. Таким образом, нейронная сеть, написанная на языке программирования C++ в полной мере, выполняет поставленные ей задачи и строит график, максимально приближенный к графику с исходными значениями, взятыми из файла.

Список литературы

  1. https://ru.wikipedia.org/wiki/Нейронная_сеть.
  2. https://sky.pro/wiki/python/kak-rabotaet-nejronnaya-set/.
  3. https://ru.wikipedia.org/wiki/Функция_активации.
  4. Гафаров Ф.М., Галимянов А.Ф. Искусственные нейронные сети и их приложения. – Казань: Изд-во Казан. ун-та, 2018. – 121 с.
  5. Программирование на C++ в примерах и задачах / А. Васильев. – Москва: Эксмо, 2023. – 368 с. – (Российский компьютерный бестселлер).
  6. Основы глубокого обучения. Создание алгоритмов для искусственного интеллекта следующего поколения / Н. Будума, Н. Локашо: пер. с англ. А. Коробейникова; [науч. ред. А. Созыкин]. – М.: Манн, Иванов и Фербер, 2020.
  7. Нейронные сети: полный курс, 2-е изд.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2016. – 1104 с.: ил. – Парал. тит. англ.
  8. https://msu.ai/neural_networks_notebook.
  9. https://www.geeksforgeeks.org/activation-functions-neural-networks/.

Поделиться

151

Иванов И. А. Нейронная сеть на языке программирования С++ // Актуальные исследования. 2025. №14 (249). Ч.I. С. 16-21. URL: https://apni.ru/article/11655-nejronnaya-set-na-yazyke-programmirovaniya-s

Обнаружили грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики)? Напишите письмо в редакцию журнала: info@apni.ru

Похожие статьи

Актуальные исследования

#16 (251)

Прием материалов

19 апреля - 25 апреля

осталось 6 дней

Размещение PDF-версии журнала

30 апреля

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

14 мая