Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Yksittäisen Neuronin Toteutus | Neuroverkon Rakentaminen Alusta Alkaen
Johdatus neuroverkkoihin

bookYksittäisen Neuronin Toteutus

Note
Määritelmä

Neuroni on neuroverkon peruslaskentayksikkö. Se käsittelee useita syötteitä ja tuottaa yhden ulostulon, mahdollistaen verkon oppimisen ja ennusteiden tekemisen.

Tässä esimerkissä tavoitteena on rakentaa neuroverkko, jossa on yksi neuroni. Sitä käytetään binääriseen luokittelutehtävään, kuten roskapostin tunnistukseen, jossa 0 tarkoittaa tavallista (ei-roskaposti) sähköpostia ja 1 tarkoittaa roskapostia.

Neuroni vastaanottaa syötteinä sähköposteista poimittuja numeerisia piirteitä ja tuottaa ulostulon väliltä 0 ja 1, mikä kuvaa todennäköisyyttä, että kyseessä on roskaposti.

Tässä on vaiheittainen eteneminen:

  1. Jokainen syöte kerrotaan vastaavalla painolla; painot ovat opittavia parametreja, jotka määrittävät kunkin syötteen merkityksen;
  2. Kaikki painotetut syötteet summataan yhteen;
  3. Summattuihin syötteisiin lisätään bias-termi, joka mahdollistaa neuronin ulostulon siirtämisen ja tuo malliin lisää joustavuutta;
  4. Summa syötetään aktivointifunktion läpi. Koska yksittäinen neuroni tuottaa suoraan lopullisen ulostulon (todennäköisyyden), käytetään sigmoidifunktiota arvojen puristamiseen välille (0,1)(0, 1).
Note
Huomio

Neuronin bias on myös opetettava parametri.

Neuroni-luokka

Neuronin täytyy tallentaa painot ja bias, joten luokka on luonteva tapa ryhmitellä nämä ominaisuudet yhteen.

Note
Huomio

Vaikka tämä luokka ei ole osa lopullista neuroverkkototeutusta, se havainnollistaa tehokkaasti keskeisiä periaatteita.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: lista satunnaisesti alustetuista arvoista, jotka määrittävät, kuinka tärkeä kukin syöte (n_inputs on syötteiden määrä) on neuronille;
  • bias: satunnaisesti alustettu arvo, joka auttaa neuronia tekemään joustavia päätöksiä.

Painot ja bias tulee alustaa satunnaisesti pienillä arvoilla välillä -1 ja 1, käyttäen tasajakaumaa, jotta symmetria rikkoutuu ja eri neuronit oppivat eri piirteitä.

Yhteenvetona, NumPy tarjoaa random.uniform()-funktion, jolla voidaan luoda satunnaisluku tai taulukko (määrittämällä size-argumentti) satunnaislukuja tasajakaumasta annetulla [low, high)-välillä.

import numpy as np

np.random.uniform(low, high, size=...)

Eteenpäinlevitys

Neuron-luokan tulisi sisältää activate()-metodi, joka laskee syötteiden painotetun summan ja soveltaa sitten aktivointifunktiota (tässä tapauksessa sigmoidifunktiota).

Kun kaksi yhtä pitkää vektoria — weights ja inputs — ovat käytettävissä, painotettu summa voidaan laskea tehokkaasti näiden vektorien pistetulolla.

Tämän avulla painotettu summa voidaan laskea yhdellä koodirivillä käyttämällä numpy.dot()-funktiota, jolloin silmukkaa ei tarvita. Bias voidaan lisätä suoraan tulokseen, jolloin saadaan input_sum_with_bias. Lopullinen tulos lasketaan soveltamalla sigmoidista aktivointifunktiota:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktivointifunktiot

Sigmoidin kaava on seuraava, missä zz tarkoittaa syötteiden painotettua summaa, johon on lisätty bias (raaka lähtöarvo) tälle neuronille:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Tämän kaavan avulla sigmoid voidaan toteuttaa yksinkertaisena funktiona Pythonissa:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

ReLU-funktion kaava on seuraava; se asettaa lähtöarvoksi zz, jos se on positiivinen, ja 0 muuten:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Mikä on bias-termiin rooli yksittäisessä neuronissa?

2. Miksi painot alustetaan pienillä satunnaisilla arvoilla nollien sijaan?

question mark

Mikä on bias-termiin rooli yksittäisessä neuronissa?

Select the correct answer

question mark

Miksi painot alustetaan pienillä satunnaisilla arvoilla nollien sijaan?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Awesome!

Completion rate improved to 4

bookYksittäisen Neuronin Toteutus

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

Neuroni on neuroverkon peruslaskentayksikkö. Se käsittelee useita syötteitä ja tuottaa yhden ulostulon, mahdollistaen verkon oppimisen ja ennusteiden tekemisen.

Tässä esimerkissä tavoitteena on rakentaa neuroverkko, jossa on yksi neuroni. Sitä käytetään binääriseen luokittelutehtävään, kuten roskapostin tunnistukseen, jossa 0 tarkoittaa tavallista (ei-roskaposti) sähköpostia ja 1 tarkoittaa roskapostia.

Neuroni vastaanottaa syötteinä sähköposteista poimittuja numeerisia piirteitä ja tuottaa ulostulon väliltä 0 ja 1, mikä kuvaa todennäköisyyttä, että kyseessä on roskaposti.

Tässä on vaiheittainen eteneminen:

  1. Jokainen syöte kerrotaan vastaavalla painolla; painot ovat opittavia parametreja, jotka määrittävät kunkin syötteen merkityksen;
  2. Kaikki painotetut syötteet summataan yhteen;
  3. Summattuihin syötteisiin lisätään bias-termi, joka mahdollistaa neuronin ulostulon siirtämisen ja tuo malliin lisää joustavuutta;
  4. Summa syötetään aktivointifunktion läpi. Koska yksittäinen neuroni tuottaa suoraan lopullisen ulostulon (todennäköisyyden), käytetään sigmoidifunktiota arvojen puristamiseen välille (0,1)(0, 1).
Note
Huomio

Neuronin bias on myös opetettava parametri.

Neuroni-luokka

Neuronin täytyy tallentaa painot ja bias, joten luokka on luonteva tapa ryhmitellä nämä ominaisuudet yhteen.

Note
Huomio

Vaikka tämä luokka ei ole osa lopullista neuroverkkototeutusta, se havainnollistaa tehokkaasti keskeisiä periaatteita.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: lista satunnaisesti alustetuista arvoista, jotka määrittävät, kuinka tärkeä kukin syöte (n_inputs on syötteiden määrä) on neuronille;
  • bias: satunnaisesti alustettu arvo, joka auttaa neuronia tekemään joustavia päätöksiä.

Painot ja bias tulee alustaa satunnaisesti pienillä arvoilla välillä -1 ja 1, käyttäen tasajakaumaa, jotta symmetria rikkoutuu ja eri neuronit oppivat eri piirteitä.

Yhteenvetona, NumPy tarjoaa random.uniform()-funktion, jolla voidaan luoda satunnaisluku tai taulukko (määrittämällä size-argumentti) satunnaislukuja tasajakaumasta annetulla [low, high)-välillä.

import numpy as np

np.random.uniform(low, high, size=...)

Eteenpäinlevitys

Neuron-luokan tulisi sisältää activate()-metodi, joka laskee syötteiden painotetun summan ja soveltaa sitten aktivointifunktiota (tässä tapauksessa sigmoidifunktiota).

Kun kaksi yhtä pitkää vektoria — weights ja inputs — ovat käytettävissä, painotettu summa voidaan laskea tehokkaasti näiden vektorien pistetulolla.

Tämän avulla painotettu summa voidaan laskea yhdellä koodirivillä käyttämällä numpy.dot()-funktiota, jolloin silmukkaa ei tarvita. Bias voidaan lisätä suoraan tulokseen, jolloin saadaan input_sum_with_bias. Lopullinen tulos lasketaan soveltamalla sigmoidista aktivointifunktiota:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktivointifunktiot

Sigmoidin kaava on seuraava, missä zz tarkoittaa syötteiden painotettua summaa, johon on lisätty bias (raaka lähtöarvo) tälle neuronille:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Tämän kaavan avulla sigmoid voidaan toteuttaa yksinkertaisena funktiona Pythonissa:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

ReLU-funktion kaava on seuraava; se asettaa lähtöarvoksi zz, jos se on positiivinen, ja 0 muuten:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Mikä on bias-termiin rooli yksittäisessä neuronissa?

2. Miksi painot alustetaan pienillä satunnaisilla arvoilla nollien sijaan?

question mark

Mikä on bias-termiin rooli yksittäisessä neuronissa?

Select the correct answer

question mark

Miksi painot alustetaan pienillä satunnaisilla arvoilla nollien sijaan?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 1
some-alt