©Egxr41k Software 2022
Консольная нейросеть для игры в крестики нолики
весь последущий текст будет свего рода документацией к даннной программе. Читайте это если ходите лучше ознакомиться с алгоритмами работы нейронных сетей
начнем с краткого пояснения для всех имеющихся классов: Program.cs - точка входа в приложение
Game.cs - это один из ключевых классов,
он содержит методы для игры в крестики нолики
Matrix.cs - содержит матрицу(двумерный массив служаций
игровым полем) и статичекие методы для управления/проверки значений в ней
DeepLearning.cs - класс реализовующий так называемое
глубокое обучение посредством игр нейросети со случайными ходами
NeuralNetwork.cs - класс нейросети
Neuron.cs - содержит в себе набор весов
переменных хранящих значения
функцию активации и производную функции активации,
являеться структурной единицей для класса NeuralNetwork
примечания: позиция символа играющего это кордината в матрице так например позиция в ценртре поля, будет иметь индексы 1 1, где первый индекс означает номер строки а второй - номер столбика (изза того что счет элементов массива начинаеться с 0 первая строка/столбик соответсвенно имеют индекс 0)
режимы игры: для каждой из двух сторон можно выбрать игрока, это может быть человек, нейросеть или случайные ходы
структура нейросети: вся нейросеть состоит из трех методов представляюх разные ее части InputLayer HiddenLayers OutputLayer технически, этих слоев несществует, но сузествует массивы нейронов
InputNeurons - хранит в себе входные нейроны,
они нужны для передачи значений в нейросеть
HiddenNeurons - в отличии от InputNeurons, этот массив двумерный
второе измерение нужно для обозначения слоев нейронов
OutputNeurons - не сществует по следущей причине:
поставленая задача требует от нейросети выход
в виде двух целых чисел от 0 до 2 включительно.
Изза того что нейросеть оперирует дробными числами от 0 до 1
испольщовать два нейрона предствляющих инлексы не выйдет
поэтому инициальзацию выхода сети реальзует метод OutputLayer.
он находит наибольшеее значение на последнем скрытом слое
и записывает в индексы его позицию так,
если бы конечные значение нейронов последного скрытого слоя
были записаны в двумерный масив(строкку и столбик)
процесс обучения: по сути класс DeepLearning.cs являетьсмя лишь оберткой над nn.Backpropogation.
во время каждого хода нейросеть получает отклик, необходимый
для обучения, представленный переменной responce
данный вид обучения можно классифицировать как обучение с учителем,
хоть и не используеться классический датасет