Perceptron-Kerrokset
Perceptroni on yksinkertaisin neuroverkko, joka koostuu vain yhdestä neuronista. Kuitenkin monimutkaisempien ongelmien ratkaisemiseksi luomme mallin nimeltä monikerroksinen perceptroni (MLP). Monikerroksinen perceptroni koostuu yhdestä tai useammasta piilokerroksesta. Monikerroksisen perceptronin rakenne on seuraava:
- Syötekerros: vastaanottaa syötedatan;
- Piilokerrokset: käsittelevät dataa ja tunnistavat kuvioita.
- Lähtökerros: tuottaa lopullisen ennusteen tai luokituksen.
Yleisesti ottaen jokainen kerros koostuu useista neuroneista, ja yhden kerroksen ulostulo 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 tallentamaan yksittäisen neuronin painot vektorina ja sen biasin skalaarina (yksittäinen luku).
Koska kerros koostuu useista neuroneista, on luontevaa 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 2×1 vektoriin b, jotka näyttävät seuraavilta:
W=[W11W21W12W22W13W23]b=[b1b2]Tässä alkio Wij edustaa j:nnen syötteen painoa i:nnelle neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bi edustaa i:nnen neuronin biasia (kaksi neuronia – kaksi biasia).
Eteenpäinlevitys
Eteenpäinlevityksen suorittaminen jokaisessa kerroksessa tarkoittaa, että jokainen sen neuroni aktivoidaan laskemalla syötteiden painotettu summa, lisäämällä bias ja soveltamalla aktivointifunktio.
Aiemmin yksittäisen neuronin kohdalla toteutit syötteiden painotetun summan laskemalla pistetulo syötevektorin ja painovektorin välillä sekä lisäämällä biasin.
Koska jokainen painomatriisin rivi sisältää tietyn neuronin painovektorin, sinun tarvitsee nyt vain suorittaa pistetulo jokaisen rivin ja syötevektorin välillä. Onneksi juuri tämän matriisikertolasku tekee:
Lisätäksesi biasit kunkin neuronin ulostuloon, tulee lisätä myös bias-vektori:
Lopuksi aktivointifunktio sovelletaan tulokseen — sigmoid tai ReLU tässä tapauksessa. Lopullinen kaava eteenpäinlevitykselle kerroksessa on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Kerrosluokka
Perceptronin perusrakenteet ovat sen kerrokset, joten on järkevää luoda erillinen Layer
-luokka. Sen attribuutit sisältävät:
inputs
: syötteiden vektori (n_inputs
on syötteiden määrä);outputs
: neuronien raaka lähtöarvojen vektori (ennen aktivointifunktion soveltamista) (n_neurons
on 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äliltä -1 ja 1, jotka on arvottu 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ä takaa myös yhtenäisyyden kerrosten välillä, mahdollistaen sujuvat matriisilaskut ilman lisätarkistuksia.
Eteenpäin kulku 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 käytämme tätä koodia ennen kuin kerromme inputs
painomatriisilla?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain how the weights and biases are initialized in the Layer class?
What is the purpose of the activation function in the forward propagation?
Could you show an example of how to use the Layer class for a simple input?
Awesome!
Completion rate improved to 4
Perceptron-Kerrokset
Pyyhkäise näyttääksesi valikon
Perceptroni on yksinkertaisin neuroverkko, joka koostuu vain yhdestä neuronista. Kuitenkin monimutkaisempien ongelmien ratkaisemiseksi luomme mallin nimeltä monikerroksinen perceptroni (MLP). Monikerroksinen perceptroni koostuu yhdestä tai useammasta piilokerroksesta. Monikerroksisen perceptronin rakenne on seuraava:
- Syötekerros: vastaanottaa syötedatan;
- Piilokerrokset: käsittelevät dataa ja tunnistavat kuvioita.
- Lähtökerros: tuottaa lopullisen ennusteen tai luokituksen.
Yleisesti ottaen jokainen kerros koostuu useista neuroneista, ja yhden kerroksen ulostulo 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 tallentamaan yksittäisen neuronin painot vektorina ja sen biasin skalaarina (yksittäinen luku).
Koska kerros koostuu useista neuroneista, on luontevaa 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 2×1 vektoriin b, jotka näyttävät seuraavilta:
W=[W11W21W12W22W13W23]b=[b1b2]Tässä alkio Wij edustaa j:nnen syötteen painoa i:nnelle neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bi edustaa i:nnen neuronin biasia (kaksi neuronia – kaksi biasia).
Eteenpäinlevitys
Eteenpäinlevityksen suorittaminen jokaisessa kerroksessa tarkoittaa, että jokainen sen neuroni aktivoidaan laskemalla syötteiden painotettu summa, lisäämällä bias ja soveltamalla aktivointifunktio.
Aiemmin yksittäisen neuronin kohdalla toteutit syötteiden painotetun summan laskemalla pistetulo syötevektorin ja painovektorin välillä sekä lisäämällä biasin.
Koska jokainen painomatriisin rivi sisältää tietyn neuronin painovektorin, sinun tarvitsee nyt vain suorittaa pistetulo jokaisen rivin ja syötevektorin välillä. Onneksi juuri tämän matriisikertolasku tekee:
Lisätäksesi biasit kunkin neuronin ulostuloon, tulee lisätä myös bias-vektori:
Lopuksi aktivointifunktio sovelletaan tulokseen — sigmoid tai ReLU tässä tapauksessa. Lopullinen kaava eteenpäinlevitykselle kerroksessa on seuraava:
a=activation(Wx+b)missä a on neuronien aktivaatioiden (ulostulojen) vektori.
Kerrosluokka
Perceptronin perusrakenteet ovat sen kerrokset, joten on järkevää luoda erillinen Layer
-luokka. Sen attribuutit sisältävät:
inputs
: syötteiden vektori (n_inputs
on syötteiden määrä);outputs
: neuronien raaka lähtöarvojen vektori (ennen aktivointifunktion soveltamista) (n_neurons
on 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äliltä -1 ja 1, jotka on arvottu 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ä takaa myös yhtenäisyyden kerrosten välillä, mahdollistaen sujuvat matriisilaskut ilman lisätarkistuksia.
Eteenpäin kulku 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 käytämme tätä koodia ennen kuin kerromme inputs
painomatriisilla?
Kiitos palautteestasi!