Az előző részben láttuk, hogyan működik egyetlen mesterséges neuron. De egy neuron önmagában még nem túl sok dologra jó. Az igazi használhatósága akkor mutatkozik meg, amikor több neuront összekapcsolunk egy réteggé. Ebben a részben ezt fogjuk egy kicsit részletesebben megnézni.
Mi az a réteg?
Egyszerűen fogalmazva a réteg nem más, mint egy rakás neuron, melyek ugyanazokkal a bemenő adatokkal dolgoznak, azonban mindegyik neuron más-más súllyal és eltolással dolgozza fel ezeket az adatokat. Ezek az adatok származhatnak közvetlenül a bemenetről, vagy egy előző rétegtől. A különböző súlyoknak és eltolásoknak köszönhetően az egyes neuronok más-más mintát tudnak felismerni ugyanabban az adatban.
Például ha egy képet elemzünk neurális hálózattal, akkor egyes neuronok a függőleges, mások a vizszintes, megint mások a ferde vonalakat ismerhetik fel. Ezek megfelelő kombinálásával lehetségessé válik bonyolultabb alakzatok felismerése. Így működik például a Facebook azon funkciója, ami arcokat ismer fel fényképeken.
Nézzünk egy példát
A szemléltetés érdekében építsünk fel egy egyszerű réteget, amelynek:
- 4 bemenete van: x1, x2, x3, x4
- 3 neuron tartalmaz
Minden egyes neuron négy súlyt (minden bemenethez egyet-egyet) és egy eltolást használ, ezekből számolja ki a saját kimeneti értékét.
z_j= w_{j1} \cdot x_1 + w_{j2} \cdot x_2 + w_{j3} \cdot x_3 + w_{j4} \cdot x_4 + b_jEbben a képletben a j az egyes neuronokra vonatkozik (1, 2, 3). A számolások elvégzése után a réteg kimenete egy három elemű vektor lesz: [z1, z2, z3]. Ez lehet akár egy következő réteg bemenete, vagy egy végleges eredmény, amelyet már nem dolgozunk fel tovább.

Python példa: egy réteg kimenetének számítása
Nézzük meg, hogyan tudjuk Python nyelven leprogramozni a fenti példát.
Fontos: ebben a példában nem használunk aktivációs függvényt, csak a „nyers” kimeneti adatokat számoljuk ki.
# Egy réteg 3 neuronból, 4 bemenettel
inputs = [1, 2, 3, 2.5]
weights = [[0.2, 0.8, -0.5, 1.0],
[0.5, -0.91, 0.26, -0.5],
[-0.26, -0.27, 0.17, 0.87]]
biases = [2, 3, 0.5]
# A réteg kimenete
layer_outputs = []
# Minden egyes neuron kimenetének kiszámítása
for neuron_weight, neuron_bias in zip(weights, biases):
# Súlyozott összeg kiszámítása
neuron_output = 0
for n_input, weight in zip(inputs, neuron_weight):
neuron_output += n_input * weight
# Eltolás hozzáadása
neuron_output += neuron_bias
# A neuron kimenetének hozzáadása a réteg kimenetéhez
layer_outputs.append(neuron_output)
print("A réteg kimenete:",layer_outputs)
>>>
A réteg kimenete:[4.8, 1.21, 2.385]Miért jó ez?
Egy több neuronból álló réteg képes egyszerre többféle mintát felismerni az adatokban. Ez az első lépés afelé, hogy mélyebb hálókat építsünk, ahol több réteget egymásra helyezve egyre összetettebb problémákat tudunk megoldani.
Következő rész
A következő cikkben megnézzük, hogy a tiszta Python megoldások helyett miért érdemes a NumPy könyvtárat használni. Egy réteget vagy akár egy teljes hálózatot sokkal gyorsabban és elegánsabban ki tudunk számolni vele, különösen akkor, ha a hálózat nagyobb és több rétegből áll.

