Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Perceptron-Kerrokset | Neuroverkon Rakentaminen Alusta Alkaen
Johdatus neuroverkkoihin

bookPerceptron-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:

  1. Syötekerros: vastaanottaa syötedatan;
  2. Piilokerrokset: käsittelevät dataa ja tunnistavat kuvioita.
  3. 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, kuinka yksittäisen neuronin painot voidaan tallentaa vektorina ja sen bias 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 33 syötettä ja 22 neuronia, sen painot tallennetaan 2×32 \times 3 matriisiin WW ja biasit tallennetaan 2×12 \times 1 vektoriin bb, jotka näyttävät seuraavilta:

W=[W11W12W13W21W22W23]b=[b1b2]W = \begin{bmatrix} W_{11} & W_{12} & W_{13}\\ W_{21} & W_{22} & W_{23} \end{bmatrix} \qquad b = \begin{bmatrix} b_1\\ b_2 \end{bmatrix}

Tässä alkio WijW_{ij} edustaa jj:nnen syötteen painoa ii:nnelle neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bib_i edustaa ii:nnen neuronin biasia (kaksi neuronia – kaksi biasia).

Eteenpäin suuntautuva laskenta

Eteenpäin suuntautuvan laskennan suorittaminen jokaiselle kerrokselle tarkoittaa jokaisen neuronin aktivointia 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, 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. Tuloksena oleva kaava eteenpäin suuntautuvalle laskennalle kerroksessa on seuraava:

a=activation(Wx+b)a = activation(Wx + b)

missä aa on neuronien aktivaatioiden (ulostulojen) vektori.

Kerrosluokka

Perceptronin keskeisiä rakennuspalikoita ovat sen kerrokset, joten on järkevää luoda erillinen Layer-luokka. Sen attribuutteihin kuuluvat:

  • inputs: syötteiden vektori (n_inputs on syötteiden määrä);
  • outputs: neuronien raakaulostuloarvojen vektori (ennen aktivointifunktion soveltamista) (n_neurons on neuronien määrä);
  • weights: painomatriisi;
  • biases: bias-vektori;
  • activation_function: kerroksessa käytettävä aktivointifunktio.

Kuten yksittäisen neuronin toteutuksessa, weights ja biases alustetaan satunnaisilla arvoilla väliltä -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 NumPy-nollavektoreina.

Note
Huomio

inputs ja outputs alustaminen nollilla täytetyiksi NumPy-taulukoiksi ehkäisee virheitä laskutoimituksissa eteen- ja taaksepäin kulussa. Tämä varmistaa myös yhtenäisyyden kerrosten välillä, jolloin matriisilaskut onnistuvat sujuvasti ilman lisätarkistuksia.

Eteenpäin kulku voidaan toteuttaa forward()-metodissa, jossa outputs lasketaan inputs-vektorin perusteella käyttäen NumPy-kirjastoa, 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 ...
Note
Huomio

Muotoilemalla inputs sarakevektoriksi varmistetaan oikea matriisikertolasku painomatriisin kanssa eteenpäin syötössä. 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?

question mark

Mikä tekee monikerroksisesta perceptronista (MLP) tehokkaamman kuin yksinkertainen perceptron?

Select the correct answer

question mark

Miksi käytämme tätä koodia ennen kuin kerromme inputs painomatriisilla?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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

bookPerceptron-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:

  1. Syötekerros: vastaanottaa syötedatan;
  2. Piilokerrokset: käsittelevät dataa ja tunnistavat kuvioita.
  3. 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, kuinka yksittäisen neuronin painot voidaan tallentaa vektorina ja sen bias 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 33 syötettä ja 22 neuronia, sen painot tallennetaan 2×32 \times 3 matriisiin WW ja biasit tallennetaan 2×12 \times 1 vektoriin bb, jotka näyttävät seuraavilta:

W=[W11W12W13W21W22W23]b=[b1b2]W = \begin{bmatrix} W_{11} & W_{12} & W_{13}\\ W_{21} & W_{22} & W_{23} \end{bmatrix} \qquad b = \begin{bmatrix} b_1\\ b_2 \end{bmatrix}

Tässä alkio WijW_{ij} edustaa jj:nnen syötteen painoa ii:nnelle neuronille, joten ensimmäinen rivi sisältää ensimmäisen neuronin painot ja toinen rivi toisen neuronin painot. Alkio bib_i edustaa ii:nnen neuronin biasia (kaksi neuronia – kaksi biasia).

Eteenpäin suuntautuva laskenta

Eteenpäin suuntautuvan laskennan suorittaminen jokaiselle kerrokselle tarkoittaa jokaisen neuronin aktivointia 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, 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. Tuloksena oleva kaava eteenpäin suuntautuvalle laskennalle kerroksessa on seuraava:

a=activation(Wx+b)a = activation(Wx + b)

missä aa on neuronien aktivaatioiden (ulostulojen) vektori.

Kerrosluokka

Perceptronin keskeisiä rakennuspalikoita ovat sen kerrokset, joten on järkevää luoda erillinen Layer-luokka. Sen attribuutteihin kuuluvat:

  • inputs: syötteiden vektori (n_inputs on syötteiden määrä);
  • outputs: neuronien raakaulostuloarvojen vektori (ennen aktivointifunktion soveltamista) (n_neurons on neuronien määrä);
  • weights: painomatriisi;
  • biases: bias-vektori;
  • activation_function: kerroksessa käytettävä aktivointifunktio.

Kuten yksittäisen neuronin toteutuksessa, weights ja biases alustetaan satunnaisilla arvoilla väliltä -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 NumPy-nollavektoreina.

Note
Huomio

inputs ja outputs alustaminen nollilla täytetyiksi NumPy-taulukoiksi ehkäisee virheitä laskutoimituksissa eteen- ja taaksepäin kulussa. Tämä varmistaa myös yhtenäisyyden kerrosten välillä, jolloin matriisilaskut onnistuvat sujuvasti ilman lisätarkistuksia.

Eteenpäin kulku voidaan toteuttaa forward()-metodissa, jossa outputs lasketaan inputs-vektorin perusteella käyttäen NumPy-kirjastoa, 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 ...
Note
Huomio

Muotoilemalla inputs sarakevektoriksi varmistetaan oikea matriisikertolasku painomatriisin kanssa eteenpäin syötössä. 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?

question mark

Mikä tekee monikerroksisesta perceptronista (MLP) tehokkaamman kuin yksinkertainen perceptron?

Select the correct answer

question mark

Miksi käytämme tätä koodia ennen kuin kerromme inputs painomatriisilla?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3
some-alt