Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Definizione di Matrice e Moltiplicazione tra Matrici


Definizione e Esempi con Python

Una matrice è una struttura dati bidimensionale composta da elementi organizzati in righe e colonne.
Il prodotto di due matrici è una nuova matrice ottenuta moltiplicando gli elementi delle righe della prima matrice per gli elementi delle colonne della seconda matrice.

Ecco un esempio di definizione e moltiplicazione di matrici utilizzando Python e la libreria NumPy:



import numpy as np

# Definizione delle matrici
A = np.array([[1, 2, 3],
              [4, 5, 6]])

B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

# Calcolo del prodotto delle matrici
C = np.dot(A, B)

# Stampa delle matrici e del risultato
print("Matrice A:")
print(A)

print("\nMatrice B:")
print(B)

print("\nProdotto delle matrici A e B:")
print(C)

In questo esempio:
- La matrice A è una matrice 2x3.
- La matrice B è una matrice 3x2.
- Il prodotto di A e B, C, sarà una matrice 2x2.
Il risultato del prodotto delle matrici sarà:
Matrice A:
[[1 2 3]
[4 5 6]]
Matrice B:
[[ 7 8]
[ 9 10]
[11 12]]
Prodotto delle matrici A e B:
[[ 58 64]
[139 154]]
Questo risultato è ottenuto moltiplicando ogni elemento delle righe di A per gli elementi corrispondenti delle colonne di B e sommando i risultati.

Il prodotto di matrici è ampiamente utilizzato in algebra lineare e ha applicazioni pratiche in molte discipline, come la grafica computerizzata, la statistica, e il machine learning.

Esempio Equazioni lineari

Supponiamo di avere il seguente sistema di equazioni lineari in algebra lineare:
\[ 2x + y = 5 \] \[ 3x - 2y = 12 \] Possiamo rappresentare questo sistema in forma matriciale come \(AX = B\), dove:
\[ A = \begin{bmatrix} 2 & 1 \\ 3 & -2 \end{bmatrix} \] \[ X = \begin{bmatrix} x \\ y \end{bmatrix} \] \[ B = \begin{bmatrix} 5 \\ 12 \end{bmatrix} \] La soluzione del sistema può essere ottenuta moltiplicando entrambi i lati per l'inversa della matrice A:
\[ X = A^{-1}B \] Ecco come risolvere questo sistema di equazioni in Python utilizzando la libreria NumPy:

import numpy as np

# Definizione della matrice A e del vettore B
A = np.array([[2, 1],
              [3, -2]])

B = np.array([[5],
              [12]])

# Calcolo dell'inversa di A
A_inv = np.linalg.inv(A)

# Calcolo della soluzione X
X = np.dot(A_inv, B)

# Stampa della soluzione
print("Soluzione del sistema di equazioni:")
print("x =", X[0, 0])
print("y =", X[1, 0])


In questo esempio:
- La matrice A rappresenta i coefficienti delle variabili nel sistema di equazioni.
- Il vettore B rappresenta i termini noti nel sistema.
- \(A^{-1}\) è l'inversa della matrice A.
- La soluzione X contiene i valori delle variabili (x) e (y).
La soluzione ottenuta sarà: Soluzione del sistema di equazioni:
x = 2.0
y = 1.0
Questo significa che x = 2 e y = 1 sono i valori che soddisfano entrambe le equazioni del sistema. In contesti statistici, la risoluzione di sistemi di equazioni lineari può essere utilizzata, ad esempio, nella regressione lineare multipla o nella stima dei coefficienti di un modello lineare.

Esempio Machine Learning

Un esempio comune di prodotto di matrici in machine learning si verifica durante l'addestramento di modelli di reti neurali,
in particolare durante la fase di forward pass. Durante il forward pass, i pesi delle connessioni tra i nodi di una rete neurale sono rappresentati da matrici, e il prodotto di queste matrici con i vettori di input o le attivazioni dei nodi costituisce una parte fondamentale della computazione.
Ecco un esempio di prodotto di matrici in una semplice rete neurale usando NumPy in Python:

import numpy as np

# Definizione della matrice dei pesi W e del vettore di input x
W = np.array([[0.1, 0.2, 0.3],
              [0.4, 0.5, 0.6],
              [0.7, 0.8, 0.9]])

x = np.array([1, 2, 3])

# Calcolo del prodotto matrice-vettore durante il forward pass
output = np.dot(W, x)

print("Matrice dei pesi W:")
print(W)

print("\nVettore di input x:")
print(x)

print("\nOutput dopo il prodotto matrice-vettore:")
print(output)


In questo esempio:
- La matrice dei pesi \(W\) rappresenta i pesi delle connessioni tra i nodi.
- Il vettore di input \(x\) rappresenta l'input alla rete neurale.
Il prodotto Wx è calcolato utilizzando `np.dot(W, x)`.
L'output ottenuto rappresenta le attivazioni dei nodi successivi nella rete neurale.
Questo processo di moltiplicazione di matrici è fondamentale in machine learning e reti neurali, in quanto consente di combinare i pesi delle connessioni tra i nodi e gli input della rete, contribuendo alla trasformazione e all'elaborazione dell'informazione nei diversi strati della rete.