Perceptron-Kerrokset
Pyyhkäise näyttääksesi valikon
Perceptron on yksinkertaisin neuroverkko—vain yksi neuroni. Monimutkaisempia tehtäviä varten käytetään monikerroksista perceptronia (MLP), joka sisältää yhden tai useamman piilokerroksen mahdollistaen verkon oppia monipuolisempia rakenteita.
MLP koostuu seuraavista:
- Syötekerros — vastaanottaa tiedot;
- Piilokerrokset — tunnistavat rakenteita;
- Lähtökerros — tuottaa ennusteet.
Jokaisessa kerroksessa on useita neuroneita; yhden kerroksen lähtö toimii seuraavan kerroksen syötteenä.
Kerroksen painot ja bias-termit
Aiemmin neuroni tallensi painonsa vektorina ja biasin skalaariarvona. Kerroksessa on kuitenkin useita neuroneita, joten painot muodostavat matriisin, jossa jokainen rivi sisältää yhden neuronin painot. Kaikkien neuronien bias-termit muodostavat vektorin.
Kerroksessa, 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 kulku
Eteenpäin kulku 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 (W):ssä on yhden neuronin painovektori, matriisikertolasku painomatriisin ja syötevektorin välillä laskee automaattisesti kaikkien neuronien painotetut summat kerralla.
Lisätäksemme biasit kunkin neuronin ulostuloihin, tulee lisätä myös bias-vektori:
Lopuksi aktivointifunktio, kuten sigmoid tai ReLU, sovelletaan tulokseen. Kerroksen eteenpäinlevityksen kaava on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Layer-luokka
Koska MLP:t rakentuvat 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 satunnaisarvoilla 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
Alustamalla inputs ja outputs nollilla estetään muotovirheet ja varmistetaan, että kerrokset pysyvät yhdenmukaisina sekä eteen- että taaksepäin suuntautuvissa vaiheissa.
Forward-metodi
Kerroksen eteenpäin suuntautuva laskenta tuottaa raakatulokset 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 koko toimivan koodin 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