Perceptronikerrokset
Pyyhkäise näyttääksesi valikon
Perceptroni on yksinkertaisin neuroverkko—vain yksi neuroni. Monimutkaisempia tehtäviä varten käytetään monikerroksista perceptronia (MLP), jossa on yksi tai useampi piilokerros, jotka mahdollistavat verkon oppia monipuolisempia kuvioita.
MLP koostuu seuraavista:
- Syötekerros — vastaanottaa datan;
- Piilokerrokset — tunnistavat kuvioita;
- Lähtökerros — tuottaa ennusteet.
Jokaisessa kerroksessa on useita neuroneita; yhden kerroksen lähtö toimii seuraavan kerroksen syötteenä.
Kerroksen painot ja biasit
Aiemmin neuroni tallensi painonsa vektorina ja biasin skalaarina. Kerroksessa on kuitenkin monta neuronia, joten sen painot muodostavat matriisin, jossa jokainen rivi sisältää yhden neuronin painot. Kaikkien neuronien biasit muodostavat vektorin.
Kerros, jossa on 3 syötettä ja 2 neuronia:
W=[W11W21W12W22W13W23],b=[b1b2]Tässä Wij on paino j:nnen syötteen ja i:nnen neuronin välillä; bi on neuronin i bias.
Eteenpäin suuntautuva laskenta
Eteenpäin suuntautuva laskenta aktivoi jokaisen neuronin laskemalla painotetun summan, lisäämällä biasin ja soveltamalla aktivointifunktiota.
Aiemmin yksittäinen neuroni käytti:
[ z = W \cdot x + b ]
Nyt, koska jokainen rivi matriisissa (W) on yhden neuronin painovektori, painomatriisin ja syötevektorin matriisikertolasku laskee automaattisesti kaikkien neuronien painotetut summat kerralla.
Lisätäksemme biasit kunkin neuronin ulostuloihin, tulee lisätä myös bias-vektori:
Lopuksi tulokseen sovelletaan aktivointifunktiota — sigmoid tai ReLU tässä tapauksessa. Kerroksen eteenpäinlevityksen lopullinen kaava on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Kerrosluokka
Koska MLP:t koostuvat kerroksista, määritellään erillinen Layer-luokka. Sen attribuutit:
inputs: syötevektori (n_inputsalkiota);outputs: neuronien raakaulostulot (n_neuronsalkiota);weights: painomatriisi;biases: bias-vektori;activation_function: kerroksessa käytetty aktivointifunktio.
Painot ja biasit alustetaan satunnaisilla arvoilla tasaisesta jakaumasta välillä ([-1, 1]). inputs ja outputs alustetaan nollilla täytetyiksi NumPy-taulukoiksi, jotta muoto pysyy yhtenäisenä myöhempää takaisinkuljetusta varten.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
inputs- ja outputs-arvojen alustaminen nollilla estää muotovirheet ja varmistaa, että kerrokset pysyvät yhtenäisinä sekä eteen- että taaksepäin kuljetuksessa.
Forward-metodi
Kerroksen eteenpäin kuljetus laskee raakaulostulot ja soveltaa aktivointia:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
Syötteen muotoilu sarakevektoriksi varmistaa, että se kerrotaan oikein painomatriisin kanssa ja vastaa verkon odotettuja mittoja.
Halutessasi voin myös tiivistää tätä lisää, tuottaa kaavion kerroksen rakenteesta tai luoda toimivan esimerkkikoodin Layer-luokalle.
1. Mikä tekee monikerroksisesta perceptronista (MLP) tehokkaamman kuin yksinkertainen perceptron?
2. Miksi tämä koodi on tarpeen suorittaa ennen kuin inputs kerrotaan painomatriisilla?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme