Perceptron-Kerrokset
Perceptroni viittaa yksinkertaisimpaan neuroverkkotyyppiin, joka koostuu vain yhdestä neuronista. Monimutkaisempien ongelmien ratkaisemiseksi käytetään mallia nimeltä monikerroksinen perceptroni (MLP). Monikerroksinen perceptroni sisältää yhden tai useamman piilokerroksen, joiden avulla verkko oppii monimutkaisia kuvioita datasta.
Monikerroksisen perceptronin rakenne sisältää:
- Syötekerros: vastaanottaa syötteen;
- Piilokerrokset: käsittelevät dataa ja tunnistavat merkityksellisiä kuvioita;
- Lähtökerros: tuottaa lopullisen ennusteen tai luokituksen.
Jokainen kerros koostuu useista neuroneista, ja yhden kerroksen lähtö toimii seuraavan kerroksen syötteenä.
Kerroksen painot ja biasit
Ennen kerroksen toteuttamista on tärkeää ymmärtää, miten jokaisen neuronin painot ja biasit tallennetaan. Edellisessä luvussa opit, kuinka yksittäisen neuronin painot tallennetaan vektorina ja bias skalaarina (yksittäinen luku).
Koska kerros koostuu useista neuroneista, on luonnollista esittää painot matriisina, jossa jokainen rivi vastaa tietyn neuronin painoja. Vastaavasti biasit voidaan esittää vektorina, jonka pituus on yhtä suuri kuin neuronien määrä.
Kun kerroksessa on 3 syötettä ja 2 neuronia, sen painot tallennetaan 2×3 matriisiin W ja biasit tallennetaan 2×1 vektoriin b, jotka näyttävät seuraavilta:
W=[W11W21W12W22W13W23]b=[b1b2]Tässä alkio Wij edustaa j. syötteen painoa i. neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bi edustaa i. neuronin biasia (kaksi neuronia – kaksi biasia).
Eteenpäinlevitys
Eteenpäinlevityksen suorittaminen jokaisessa kerroksessa tarkoittaa jokaisen neuronin aktivoimista laskemalla syötteiden painotettu summa, lisäämällä bias ja soveltamalla aktivointifunktiota.
Aiemmin yksittäisen neuronin kohdalla toteutit syötteiden painotetun summan laskemalla pistetulon syötevektorin ja painovektorin välillä sekä lisäämällä biasin.
Koska jokainen painomatriisin rivi sisältää tietyn neuronin painovektorin, tarvitsee nyt vain suorittaa pistetulo jokaisen rivin ja syötevektorin välillä. Onneksi juuri tämän matriisikertolasku tekee:
Lisätäkseen biasit kunkin neuronin ulostuloon, tulee lisätä myös bias-vektori:
Lopuksi aktivointifunktio sovelletaan tulokseen — sigmoid tai ReLU tässä tapauksessa. Eteenpäinlevityksen lopullinen kaava kerroksessa on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Kerrosluokka
Perceptronin perusrakennuspalikoita ovat sen kerrokset, joten on järkevää luoda erillinen Layer-luokka. Sen attribuutteihin kuuluvat:
inputs: syötteiden vektori (n_inputson syötteiden määrä);outputs: neuronien raakaulostuloarvojen vektori (ennen aktivointifunktion soveltamista) (n_neuronson neuronien määrä);weights: painomatriisi;biases: bias-vektori;activation_function: kerroksessa käytetty aktivointifunktio.
Kuten yksittäisen neuronin toteutuksessa, weights ja biases alustetaan satunnaisilla arvoilla välillä -1 ja 1, jotka on poimittu tasaisesta jakaumasta.
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
Attribuutteja inputs ja outputs käytetään myöhemmin takaisinkytkennässä, joten ne kannattaa alustaa nollilla täytetyiksi NumPy-taulukoiksi.
Alustamalla inputs ja outputs nollilla täytetyiksi NumPy-taulukoiksi estetään virheet eteen- ja taaksepäin suuntautuvissa laskuissa. Tämä varmistaa myös yhtenäisyyden kerrosten välillä, jolloin matriisilaskut sujuvat ilman lisätarkistuksia.
Eteenpäin suuntautuva laskenta voidaan toteuttaa forward()-metodissa, jossa outputs lasketaan inputs-vektorin perusteella käyttäen NumPya yllä olevan kaavan mukaisesti:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Muotoilemalla inputs sarakevektoriksi varmistetaan oikea matriisikertolasku painomatriisin kanssa eteenpäinlevityksen aikana. Tämä estää muotovirheet ja mahdollistaa sujuvat laskutoimitukset kaikissa kerroksissa.
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
Can you explain how the matrix multiplication works in forward propagation?
What is the purpose of the activation function in a neural network layer?
Could you show an example of how to initialize the weights and biases in the Layer class?
Awesome!
Completion rate improved to 4
Perceptron-Kerrokset
Pyyhkäise näyttääksesi valikon
Perceptroni viittaa yksinkertaisimpaan neuroverkkotyyppiin, joka koostuu vain yhdestä neuronista. Monimutkaisempien ongelmien ratkaisemiseksi käytetään mallia nimeltä monikerroksinen perceptroni (MLP). Monikerroksinen perceptroni sisältää yhden tai useamman piilokerroksen, joiden avulla verkko oppii monimutkaisia kuvioita datasta.
Monikerroksisen perceptronin rakenne sisältää:
- Syötekerros: vastaanottaa syötteen;
- Piilokerrokset: käsittelevät dataa ja tunnistavat merkityksellisiä kuvioita;
- Lähtökerros: tuottaa lopullisen ennusteen tai luokituksen.
Jokainen kerros koostuu useista neuroneista, ja yhden kerroksen lähtö toimii seuraavan kerroksen syötteenä.
Kerroksen painot ja biasit
Ennen kerroksen toteuttamista on tärkeää ymmärtää, miten jokaisen neuronin painot ja biasit tallennetaan. Edellisessä luvussa opit, kuinka yksittäisen neuronin painot tallennetaan vektorina ja bias skalaarina (yksittäinen luku).
Koska kerros koostuu useista neuroneista, on luonnollista esittää painot matriisina, jossa jokainen rivi vastaa tietyn neuronin painoja. Vastaavasti biasit voidaan esittää vektorina, jonka pituus on yhtä suuri kuin neuronien määrä.
Kun kerroksessa on 3 syötettä ja 2 neuronia, sen painot tallennetaan 2×3 matriisiin W ja biasit tallennetaan 2×1 vektoriin b, jotka näyttävät seuraavilta:
W=[W11W21W12W22W13W23]b=[b1b2]Tässä alkio Wij edustaa j. syötteen painoa i. neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bi edustaa i. neuronin biasia (kaksi neuronia – kaksi biasia).
Eteenpäinlevitys
Eteenpäinlevityksen suorittaminen jokaisessa kerroksessa tarkoittaa jokaisen neuronin aktivoimista laskemalla syötteiden painotettu summa, lisäämällä bias ja soveltamalla aktivointifunktiota.
Aiemmin yksittäisen neuronin kohdalla toteutit syötteiden painotetun summan laskemalla pistetulon syötevektorin ja painovektorin välillä sekä lisäämällä biasin.
Koska jokainen painomatriisin rivi sisältää tietyn neuronin painovektorin, tarvitsee nyt vain suorittaa pistetulo jokaisen rivin ja syötevektorin välillä. Onneksi juuri tämän matriisikertolasku tekee:
Lisätäkseen biasit kunkin neuronin ulostuloon, tulee lisätä myös bias-vektori:
Lopuksi aktivointifunktio sovelletaan tulokseen — sigmoid tai ReLU tässä tapauksessa. Eteenpäinlevityksen lopullinen kaava kerroksessa on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Kerrosluokka
Perceptronin perusrakennuspalikoita ovat sen kerrokset, joten on järkevää luoda erillinen Layer-luokka. Sen attribuutteihin kuuluvat:
inputs: syötteiden vektori (n_inputson syötteiden määrä);outputs: neuronien raakaulostuloarvojen vektori (ennen aktivointifunktion soveltamista) (n_neuronson neuronien määrä);weights: painomatriisi;biases: bias-vektori;activation_function: kerroksessa käytetty aktivointifunktio.
Kuten yksittäisen neuronin toteutuksessa, weights ja biases alustetaan satunnaisilla arvoilla välillä -1 ja 1, jotka on poimittu tasaisesta jakaumasta.
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
Attribuutteja inputs ja outputs käytetään myöhemmin takaisinkytkennässä, joten ne kannattaa alustaa nollilla täytetyiksi NumPy-taulukoiksi.
Alustamalla inputs ja outputs nollilla täytetyiksi NumPy-taulukoiksi estetään virheet eteen- ja taaksepäin suuntautuvissa laskuissa. Tämä varmistaa myös yhtenäisyyden kerrosten välillä, jolloin matriisilaskut sujuvat ilman lisätarkistuksia.
Eteenpäin suuntautuva laskenta voidaan toteuttaa forward()-metodissa, jossa outputs lasketaan inputs-vektorin perusteella käyttäen NumPya yllä olevan kaavan mukaisesti:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Muotoilemalla inputs sarakevektoriksi varmistetaan oikea matriisikertolasku painomatriisin kanssa eteenpäinlevityksen aikana. Tämä estää muotovirheet ja mahdollistaa sujuvat laskutoimitukset kaikissa kerroksissa.
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!