Rețele neuronale (1) - Teorie

Definiție rețelelor neuronale artificiale

Rețelele neuronale artificiale (RNA) sunt modele de procesare a informațiilor inspirate de structura și funcționarea creierului uman. Acestea sunt algoritmi matematici ce imită modul în care neuronii comunică și interacționează în creier, permițând astfel mașinilor și calculatoarelor să învețe și să se dezvolte autonom într-un mod asemănător cum o fac oamenii.

O rețea neuronală artificială este formată dintr-o serie de noduri interconectate (numite neuroni artificiali) care transmit semnale între ele. Aceste conexiuni sunt greutăți ponderate care se pot adapta în timpul antrenării rețelei, astfel încât aceasta să poată învăța și să facă predicții sau să ia decizii bazate pe datele de intrare.

În general, o rețea neuronală artificială este antrenată printr-un proces de învățare supervizată sau nesupervizată, prin care se ajustează parametrii modelului pentru a minimiza eroarea de predicție. După antrenare, rețeaua neuronală artificială poate fi folosită pentru a face predicții sau să ia decizii pe baza unor date noi de intrare. Această capacitate de a învăța și de a se adapta face din rețelele neuronale artificiale o tehnică importantă și versatilă în domenii precum recunoașterea imaginilor, procesarea limbajului natural, analiza datelor și multe altele.

Reprezentare neuron

Neuronul artificial poate fi reprezentat matematic prin următoarea formulă:

y = f(Σ(w*x) + b)

unde:

  • y este ieșirea neuronului artificial
  • f este funcția de activare a neuronului
  • w sunt ponderile sinapselor (conexiunilor) neuronului, care reprezintă importanța fiecărei intrări
  • x sunt intrările neuronului
  • b este bias-ul, o valoare adăugată la suma ponderată a intrărilor, care afectează pragul de activare al neuronului

Funcția de activare poate fi de diferite tipuri, cum ar fi funcția sigmoidă sau ReLU (Rectified Linear Unit), iar suma ponderată Σ(w*x) reprezintă suma produselor dintre ponderile sinapselor și intrările corespunzătoare.


Astfel, neuronul artificial calculează o combinație liniară a intrărilor sale, aplică o funcție de activare și produce o ieșire. Acest proces se repetă pentru fiecare neuron din rețeaua neuronală, până la producerea ieșirii finale.

 



 

Rețea multi-strat
 
 Rețelele neuronale multistrat sunt reprezentate matematic prin conexiuni ponderate între neuroni dispuși în straturi. O rețea neuronală cu straturi multiple poate fi reprezentată sub forma unei funcții matematice compuse, numită funcție de propagare înainte (feedforward), care transformă datele de intrare în date de ieșire. Aceasta poate fi exprimată astfel:

y(x) = f(w^(L) * f(w^(L-1) * ... f(w^(1) * x)))

unde:

  • x este vectorul de intrare
  • y(x) este vectorul de ieșire
  • f este funcția de activare a neuronilor (de obicei sigmoidală sau ReLU)
  • w^(i) este matricea de ponderi care conectează straturile i și i+1

În această reprezentare, fiecare strat de neuroni este reprezentat ca o matrice de ponderi w^(i) care conectează neuroni din stratul i cu neuroni din stratul i+1. De exemplu, dacă avem o rețea neuronală cu trei straturi (un strat de intrare, unul ascuns și unul de ieșire), atunci avem două matrici de ponderi w^(1) și w^(2), unde w^(1) conectează straturile de intrare și ascuns, iar w^(2) conectează straturile ascuns și de ieșire.


Pentru a antrena o rețea neuronală multistrat, se folosește de obicei algoritmul de retropropagare a erorii (backpropagation), care utilizează gradientul funcției de eroare față de ponderile rețelei pentru a actualiza ponderile și a îmbunătăți performanța modelului.

 



Învățarea supervizată prin corecția erorilor

Învățarea supervizată este o metodă de antrenare a rețelelor neuronale artificiale în care modelul este alimentat cu un set de date de intrare și ieșire cunoscute, numite date de antrenare. Scopul antrenării este de a ajusta parametrii rețelei astfel încât să poată face predicții corecte pentru noi date de intrare care nu sunt cunoscute.

Un algoritm de învățare supervizată funcționează prin următorii pași:

  1. Se selectează un set de date de antrenare care conține exemple de intrare și ieșire cunoscute.
  2. Se alimentează datele de intrare în rețeaua neuronală și se obțin ieșiri estimate.
  3. Se compară ieșirile estimate cu valorile de ieșire cunoscute pentru a determina eroarea de predicție.
  4. Se ajustează parametrii rețelei pentru a reduce eroarea de predicție. Acest proces de ajustare a parametrilor se face prin propagarea înapoi a erorii prin rețea și actualizarea greutăților sinaptice.
  5. Se repetă pașii 2-4 pentru toate exemplele din setul de date de antrenare, până când eroarea de predicție este redusă la un nivel acceptabil.

În acest proces, erorile sunt utilizate pentru a actualiza greutățile sinaptice prin algoritmi de optimizare, cum ar fi gradientul descendent. Acești algoritmi încurajează rețeaua neuronală să găsească parametrii care minimizează eroarea de predicție, astfel încât aceasta să poată face predicții precise pentru noi date de intrare.


În general, învățarea supervizată prin corecția erorii este una dintre cele mai comune și eficiente metode de antrenare a rețelelor neuronale artificiale, deoarece oferă un mecanism precis pentru a evalua și îmbunătăți performanța modelului.

ChatGPT este un model bazat pe rețele neuronale artificiale, mai precis un model de limbaj natural preantrenat pe un volum mare de date textuale, utilizând arhitectura GPT (Generative Pre-trained Transformer) dezvoltată de OpenAI. Această arhitectură de rețele neuronale artificiale este capabilă să învețe reprezentări semantice și sintactice ale limbajului natural, ceea ce îi permite să genereze text coerent și fluent, să traducă text în alte limbi și să răspundă la întrebări sau comenzi primite în limbaj natural.
 

Verificarea învățării

 Există mai multe metode prin care se pot verifica datele învățate de o rețea neuronală artificială. Iată câteva dintre acestea:
  1. Metoda setului de date de testare: se poate folosi un set de date de testare care nu a fost utilizat în procesul de antrenare al rețelei neuronale. Setul de date de testare poate fi utilizat pentru a evalua performanța rețelei neuronale prin compararea ieșirilor produse de aceasta cu rezultatele așteptate. Acest proces se numește validare și permite verificarea capacității rețelei neuronale de a generaliza la date noi.

  2. Metoda matricei de confuzie: în cazul în care rețeaua neuronală este utilizată pentru clasificarea datelor, matricea de confuzie poate fi utilizată pentru a evalua performanța acesteia. Matricea de confuzie prezintă numărul de observații corecte și incorecte clasificate de rețeaua neuronală, în funcție de clasa lor.

  3. Metoda analizei erorilor: se poate efectua o analiză a erorilor produse de rețeaua neuronală pentru a identifica tipurile de erori și sursele acestora. Această analiză poate fi folosită pentru a îmbunătăți performanța rețelei neuronale prin ajustarea arhitecturii sau parametrilor acesteia.

  4. Metoda vizualizării datelor: se poate utiliza vizualizarea datelor pentru a identifica modele sau relații între datele de intrare și rezultatele obținute de rețeaua neuronală. Acestea pot ajuta la identificarea unor erori sau la îmbunătățirea arhitecturii rețelei neuronale.

Acestea sunt doar câteva exemple de metode utilizate pentru verificarea datelor învățate de o rețea neuronală artificială. Este important să se utilizeze mai multe metode în combinație pentru a asigura o evaluare corectă și precisă a performanței rețelei neuronale.


Exemplu


#include <iostream>
#include <cmath>
using namespace std;

// Definirea functiei de activare
double sigmoid(double x) {
    return 1 / (1 + exp(-x));
}

// Definirea structurii unui neuron
struct Neuron {
    double weights[2];
    double bias;
};

// Definirea functiei pentru calculele dintr-un singur strat
double calculateLayer(double input[], Neuron neurons[], int numNeurons) {
    double layerOutput = 0;
    for (int i = 0; i < numNeurons; i++) {
        double neuronOutput = 0;
        for (int j = 0; j < 2; j++) {
            neuronOutput += input[j] * neurons[i].weights[j];
        }
        neuronOutput += neurons[i].bias;
        layerOutput += sigmoid(neuronOutput);
    }
    return layerOutput;
}

// Functia principala
int main() {
    // Initializare date de intrare
    double square[2] = {1, 1};
    double circle[2] = {0.5, 0.5};

    // Initializare neuroni
    Neuron squareNeuron = {{-1, -1}, 1.5};
    Neuron circleNeuron = {{1, 1}, -1.5};

    // Calculare iesiri
    double squareOutput = calculateLayer(square, &squareNeuron, 1);
    double circleOutput = calculateLayer(circle, &circleNeuron, 1);

    // Afisare rezultate
    cout << "Punctul (" << square[0] << ", " << square[1] << ") este ";
    if (squareOutput >= circleOutput) {
        cout << "un patrat" << endl;
    } else {
        cout << "un cerc" << endl;
    }
    cout << "Punctul (" << circle[0] << ", " << circle[1] << ") este ";
    if (circleOutput >= squareOutput) {
        cout << "un cerc" << endl;
    } else {
        cout << "un patrat" << endl;
    }

    return 0;
}

În acest exemplu, rețeaua neuronală constă dintr-un singur strat cu doi neuroni, unul pentru pătrat și unul pentru cerc. Fiecare neuron are două ponderi și un termen de deplasare, iar funcția de activare folosită este sigmoida. 
 
Datele de intrare sunt reprezentate de două coordonate, iar rezultatul este afișat în funcție de iesirile calculate.
 
Funcția sigmoidă este o funcție matematică non-liniară, folosită în mod obișnuit în rețelele neuronale artificiale. Funcția sigmoidă poate fi definită matematic astfel:
  
 

unde x reprezintă argumentul funcției.

Funcția sigmoidă are o formă caracteristică în formă de S și este o funcție de tranziție abruptă între două valori (0 și 1), ceea ce o face potrivită pentru utilizarea în rețelele neuronale ca funcție de activare a neuronilor.

În rețelele neuronale, neuronii primesc un semnal de intrare și îl transformă într-un semnal de ieșire, folosind o funcție de activare. Funcția sigmoidă este una dintre cele mai comune funcții de activare folosite în rețelele neuronale, deoarece poate fi utilizată pentru a produce o ieșire non-lineară, cu o gamă de valori între 0 și 1, ceea ce este util în cazul problemelor de clasificare binară. De asemenea, funcția sigmoidă este ușor de derivat și se poate utiliza în algoritmul de propagare înapoi (backpropagation), care este folosit pentru a antrena rețelele neuronale.

 Documentație

 
  Pentru întrebări și/sau consultanță tehnică vă stau la dispozitie pe blog sau pe email simedruflorin@automatic-house.ro. O seară plăcută tuturor !
 
 

Back to top of page

Etichete

Afișați mai multe

Arhiva

Afișați mai multe