Table of Contents

0. Wstęp

Niniejszy artykuł - Sieci neuronowe (C#) - ma na celu zilustrowanie podstawowych pojęć z zakresu sieci neuronowych za pomocą przykładów napisanych w C#. Równolegle, część z tu zaprezentowanych programów ma swoje odpowiedniki przeniesione do Delphi Object Pascala.

Dla kogo jest ten artykuł? Przede wszystkim dla programistów C#, którzy chcą zrozumieć, jak działają sieci neuronowe "od środka", bez korzystania z gotowych bibliotek i frameworków. Artykuł zakłada podstawową znajomość programowania w C# oraz podstaw matematyki (algebra liniowa, rachunek różniczkowy). I to w zasadzie tyle - reszta wiedzy jest przekazywana w trakcie lektury.

Pełne kody źródłowe dostępne są w repozytorium na GitHub.

Dostępna jest również wersja w formacie PDF.

Spis treści

Artykuł został podzielony na następujące rozdziały:

W rozdziale tym opisano regresję liniową (jako szczególny przypadek sieci neuronowej), metodę najmniejszych kwadratów, metodę spadku gradientowego do uczenia modelu, funkcję straty MSE oraz jej pochodne (względem współczynnika kierunkowego i wyrazu wolnego).

W rozdziale tym opisana została regresja wieloraka, macierze i implementacja podstawowych operacji macierzowych, które posłużą w dalszej części artykułu do konstrukcji sieci neuronowych.

Przedstawiono proces uczenia modelu regresji wielorakiej na rzeczywistych danych z zestawu Boston Housing z użyciem metod omówionych w rozdziale 2. Przedstawiono również sposób przygotowania danych do uczenia modelu (podział na zbiór uczący i testowy, standaryzacja).

Przedstawiono budowę i działanie prostej sieci neuronowej z jedną warstwą ukrytą, porównując ją z modelem regresji wielorakiej. Omówiono proces uczenia sieci za pomocą metody spadku gradientowego i reguły łańcuchowej. Przedstawiono podstawowe wzory na pochodne funkcji straty względem wag i biasów poszczególnych warstw sieci.

Przedstawiono strukturę i funkcjonalność biblioteki NeuralNetworks (C#), służącej do definiowania i trenowania modeli sieci neuronowych oraz do przeprowadzania procesu wnioskowania (inferencji) z użyciem tych modeli. Omówiono sposób definiowania architektury sieci, funkcji aktywacji, funkcji straty oraz metod optymalizacji dostępnych w bibliotece. Przedstawiono wzory matematyczne i implementacje podstawowych elementów, takich jak funkcje aktywacji, funkcje straty oraz algorytmy optymalizacji.

Zaprezentowano przykłady wykorzystania biblioteki NeuralNetworks do definiowania i trenowania modeli sieci neuronowych na zbiorze danych Boston Housing, MNIST (rozpoznawanie ręcznie pisanych cyfr) i aproksymacji funkcji sinusoidalnej. Omówiono proces przygotowania danych, definiowania architektury sieci, wyboru funkcji aktywacji i funkcji straty, a także procesu uczenia modelu za pomocą metody spadku gradientowego.

Zaprezentowano sieci konwolucyjne 1D i 2D, omówiono ich architekturę, działanie oraz zastosowania. Przedstawiono wzory matematyczne opisujące operacje konwolucji, poolingu oraz normalizacji, a także implementacje tych operacji w C#. Omówiono również proces uczenia sieci konwolucyjnych za pomocą metody spadku gradientowego. Omówiono zastosowanie sieci konwolucyjnych dla zbiorów ECG200 i MNIST.

Zaproponowano implementację modelu językowego GPT-2 w C# opartą o oryginalny kod w Pythonie zaprezentowany przez OpenAI, omijając proces trenowania modelu i korzystając z gotowych wag.

Reszta in progress...


Created: 2025-11-10

Last modified: 2026-02-08

Title: 0. Wstęp

Tags: [C#] [Object Pascal] [Delphi] [Sieci neuronowe] [Regresja liniowa]