Yksittäisen Neuronin Toteutus
Neuroni on neuroverkon peruslaskentayksikkö. Se käsittelee useita syötteitä ja tuottaa yhden ulostulon, mahdollistaen verkon oppimisen ja ennusteiden tekemisen.
Tässä vaiheessa haluamme rakentaa neuroverkon, jossa on vain yksi neuroni. Esimerkkinä käytämme sitä binääriseen luokittelutehtävään, kuten roskapostin tunnistukseen, jossa 0 tarkoittaa tavallista (ei-roskaposti) sähköpostia ja 1 tarkoittaa roskapostia.
Neuroni ottaa syötteinä sähköposteihin liittyviä numeerisia piirteitä ja tuottaa ulostulon väliltä 0 ja 1, mikä kuvaa todennäköisyyttä, että sähköposti on roskapostia.
Tapahtumien kulku vaiheittain:
- Jokainen syöte kerrotaan vastaavalla painolla. Painot ovat opittavia parametreja, jotka määrittävät kunkin syötteen merkityksen;
- Kaikki painotetut syötteet lasketaan yhteen;
- Lisätään ylimääräinen parametri nimeltä bias syötesummaan. Bias mahdollistaa neuronin tuloksen siirtämisen ylös- tai alaspäin, mikä tuo mallille joustavuutta;
- Syötesumma syötetään aktivointifunktion läpi. Koska käytössä on vain yksi neuroni, joka tuottaa suoraan lopputuloksen (todennäköisyyden), käytämme sigmoidifunktiota, joka puristaa arvot välille (0,1).
Neuronin bias on myös opetettava parametri.
Neuroniluokka
Neuronin täytyy tallentaa painot ja bias, joten luokka on luonnollinen tapa ryhmitellä nämä ominaisuudet.
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_inputson 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 erilaisia piirteitä.
Yhteenvetona, NumPy tarjoaa random.uniform()-funktion, jolla voidaan luoda satunnaisluku tai taulukko (määrittelemällä size-argumentti) satunnaislukuja tasajakaumasta välillä [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Eteenpäinlevitys
Lisäksi Neuron-luokassa tulisi olla activate()-metodi, joka laskee syötteiden painotetun summan ja käyttää aktivointifunktiota (tässä tapauksessa sigmoidia).
Jos meillä on kaksi yhtä pitkää vektoria (weights ja inputs), painotettu summa voidaan laskea näiden vektorien pistetulolla:
Tämän avulla voimme laskea painotetun summan 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 ulostulo lasketaan käyttämällä sigmoid-aktivointifunktiota:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktivointifunktiot
Sigmoidin kaava on seuraava, missä z tarkoittaa painotettujen syötteiden summan ja biasin yhdistelmää (raaka lähtöarvo) tälle neuronille:
σ(z)=1+e−z1Tä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 z, jos se on positiivinen, ja 0 muuten:
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?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show me how to complete the Neuron class with random initialization?
How does the activate method work in practice?
Can you explain why we use the sigmoid function for binary classification?
Awesome!
Completion rate improved to 4
Yksittäisen Neuronin Toteutus
Pyyhkäise näyttääksesi valikon
Neuroni on neuroverkon peruslaskentayksikkö. Se käsittelee useita syötteitä ja tuottaa yhden ulostulon, mahdollistaen verkon oppimisen ja ennusteiden tekemisen.
Tässä vaiheessa haluamme rakentaa neuroverkon, jossa on vain yksi neuroni. Esimerkkinä käytämme sitä binääriseen luokittelutehtävään, kuten roskapostin tunnistukseen, jossa 0 tarkoittaa tavallista (ei-roskaposti) sähköpostia ja 1 tarkoittaa roskapostia.
Neuroni ottaa syötteinä sähköposteihin liittyviä numeerisia piirteitä ja tuottaa ulostulon väliltä 0 ja 1, mikä kuvaa todennäköisyyttä, että sähköposti on roskapostia.
Tapahtumien kulku vaiheittain:
- Jokainen syöte kerrotaan vastaavalla painolla. Painot ovat opittavia parametreja, jotka määrittävät kunkin syötteen merkityksen;
- Kaikki painotetut syötteet lasketaan yhteen;
- Lisätään ylimääräinen parametri nimeltä bias syötesummaan. Bias mahdollistaa neuronin tuloksen siirtämisen ylös- tai alaspäin, mikä tuo mallille joustavuutta;
- Syötesumma syötetään aktivointifunktion läpi. Koska käytössä on vain yksi neuroni, joka tuottaa suoraan lopputuloksen (todennäköisyyden), käytämme sigmoidifunktiota, joka puristaa arvot välille (0,1).
Neuronin bias on myös opetettava parametri.
Neuroniluokka
Neuronin täytyy tallentaa painot ja bias, joten luokka on luonnollinen tapa ryhmitellä nämä ominaisuudet.
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_inputson 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 erilaisia piirteitä.
Yhteenvetona, NumPy tarjoaa random.uniform()-funktion, jolla voidaan luoda satunnaisluku tai taulukko (määrittelemällä size-argumentti) satunnaislukuja tasajakaumasta välillä [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Eteenpäinlevitys
Lisäksi Neuron-luokassa tulisi olla activate()-metodi, joka laskee syötteiden painotetun summan ja käyttää aktivointifunktiota (tässä tapauksessa sigmoidia).
Jos meillä on kaksi yhtä pitkää vektoria (weights ja inputs), painotettu summa voidaan laskea näiden vektorien pistetulolla:
Tämän avulla voimme laskea painotetun summan 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 ulostulo lasketaan käyttämällä sigmoid-aktivointifunktiota:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktivointifunktiot
Sigmoidin kaava on seuraava, missä z tarkoittaa painotettujen syötteiden summan ja biasin yhdistelmää (raaka lähtöarvo) tälle neuronille:
σ(z)=1+e−z1Tä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 z, jos se on positiivinen, ja 0 muuten:
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?
Kiitos palautteestasi!