Yksittäisen Neuronin Toteutus
Pyyhkäise näyttääksesi valikon
Neuron on neuroverkon peruslaskentayksikkö. Se käsittelee useita syötteitä ja tuottaa yhden ulostulon, mahdollistaen verkon oppimisen ja ennusteiden tekemisen.
Tässä esimerkissä rakennetaan neuroverkko, jossa on yksi neuroni binääriluokittelutehtävää varten (esim. roskapostin tunnistus). Neuroni vastaanottaa numeerisia piirteitä ja tuottaa arvon välillä 0 ja 1, mikä kuvaa todennäköisyyttä, että sähköposti on roskapostia (1) tai ei (0).
Vaiheittain:
- Kerro jokainen syöte omalla painollaan;
- Laske kaikkien painotettujen syötteiden summa;
- Lisää bias siirtämään ulostuloa;
- Syötä tulos sigmoid-aktivointifunktion läpi, joka muuntaa sen (0,1)-välille todennäköisyysulostuloa varten.
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.
Vaikka tämä luokka ei tule olemaan osa lopullista neuroverkkototeutusta, se havainnollistaa tehokkaasti keskeisiä periaatteita.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: satunnaisesti alustetut arvot (yksi kutakin syötettä kohden);bias: yksi satunnainen arvo. Molemmat arvot arvotaan tasaisesta jakaumasta välillä ([-1, 1]) käyttäennp.random.uniform()-funktiota symmetrian rikkomiseksi.
Eteenpäinlevitys
Neuronin activate()-metodi laskee painotetun summan ja käyttää sigmoidia.
Painotettu summa lasketaan pistetulolla painojen ja syötteiden välillä:
input_sum_with_bias = np.dot(self.weights, inputs) + self.bias
Tämän jälkeen aktivaatiota sovelletaan neuronin lopullisen ulostulon saamiseksi.
np.dot()-funktion käyttö välttää silmukat ja laskee koko painotetun summan yhdellä rivillä.
Sigmoidifunktio muuntaa tämän raaka-arvon todennäköisyydeksi:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Sigmoid-aktivointi
Annetulla raaka-arvolla (z) sigmoid on:
σ(z)=1+e−z1Se muuntaa minkä tahansa luvun välille ((0,1)), mikä tekee siitä ihanteellisen binääriluokitteluun, jossa neuronin ulostulon tulee edustaa todennäköisyyttä.
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, joka käytännössä asettaa ulostulon yhtä suureksi kuin 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