Perceptron: A mesterséges neurális hálózat építőköve

Forrás csomópont: 1216283

Ha Ön a gépi tanulás és a mesterséges intelligencia rajongója, biztosan találkozott a perceptron szóval. A Perceptront számos mély tanulási kurzus első fejezetében tanítják. Tehát mi is ez pontosan? Mi az inspiráció mögötte? Pontosan hogyan oldja meg az osztályozási problémát? Ebben a cikkben a perceptron mögötti biológiai inspirációval kezdjük, majd elmélyülünk annak matematikai technikai jellemzőiben, és végül egy bináris osztályozót építünk a semmiből egy perceptron egység segítségével.

A neurális hálózatok biológiai inspirációja

A neuron (idegsejt) az idegrendszer alapvető építőköve. Az emberi agy több milliárd neuronból áll, amelyek egymással kapcsolatban állnak. Ők felelősek az agyból érkező jelek fogadásáért és küldéséért. Amint az alábbi ábrán látható, egy tipikus neuron három fő részből áll – dendritekből, egy axonból és sejttestből vagy szómából. A dendritek faszerű ágak, amelyek a sejttestből származnak. Információkat kapnak a többi neurontól. A Soma egy neuron magja. Felelős a dendritektől kapott információk feldolgozásáért. Az Axon olyan, mint egy kábel, amelyen keresztül a neuronok küldik az információt. A vége felé az axon sok ágra bomlik, amelyek dendritjeiken keresztül kapcsolatot létesítenek a többi neuronnal. A Az axon és más neuron dendritek közötti kapcsolatot szinapszisoknak nevezzük.

1: Biological Neuron versus Artificial Neural Network

Image Source: Willems, K. (2017, május 2.). Keras oktatóanyag: Mély tanulás Pythonban.

Mivel az ANN-t az agy működése ihlette, lássuk, hogyan működik az agy. Az agy neuronok milliárdjaiból álló hálózatból áll. Elektromos és kémiai jelekkel kommunikálnak egy szinapszison keresztül, amelyben az egyik neuronból származó információ átkerül a többi neuronhoz. Az átviteli folyamat egy „akciós potenciálnak” nevezett elektromos impulzusból áll. A továbbítandó információhoz a bemeneti jeleknek (impulzusoknak) elég erősnek kell lenniük ahhoz, hogy átlépjenek egy bizonyos küszöbkorlátot, ekkor csak egy neuron aktiválja és továbbítja a jelet (output).

Franck Rosenblatt amerikai tudós egy neuron biológiai működése által ihletett a perceptron koncepciójával 1957-ben a Cornell Aeronautical Laboratoryban.

  • Az idegsejt különböző erősségű elektromos impulzusok formájában kap információkat más neuronoktól.
  • A neuron integrálja a többi idegsejttől kapott összes impulzust.
  • Ha az eredményül kapott összegzés nagyobb, mint egy bizonyos küszöbérték, a neuron „bevillan”, akciós potenciált váltva ki, amely továbbadódik a többi kapcsolódó neuronnak.

A Perceptron fő összetevői

A Rosenblatt-féle perceptron alapvetően egy bináris osztályozó. A perceptron 3 fő részből áll:

  • Bemeneti csomópontok vagy bemeneti réteg: A bemeneti réteg a kezdeti adatokat továbbítja a rendszerbe további feldolgozás céljából. Minden bemeneti csomóponthoz számérték tartozik. Bármilyen valós értéket felvehet.
  • Súlyok és torzítás: A súlyparaméterek az egységek közötti kapcsolat erősségét jelzik. Minél nagyobb a súly, annál erősebb a kapcsolódó bemeneti neuron befolyása a kimenet eldöntésére. A torzítás ugyanazt játssza, mint a metszéspont egy lineáris egyenletben.
  • Aktiválási funkció: Az aktiválási funkció határozza meg, hogy a neuron tüzel-e vagy sem. A legegyszerűbb esetben az aktiválási funkció egy lépés funkció, de a forgatókönyv alapján különböző aktiválási funkciók használhatók.

Ezekről a következő részben fogunk többet látni.

Perceptron működése

Az első lépésben az összes bemeneti értéket megszorozzuk a megfelelő súlyukkal, és összeadjuk. A kapott eredményt súlyozott összegnek nevezzük ∑wi*xi, vagy másképp mondják,  x1*w1 + x2*w2 +…wn*xn. Ez az összeg megfelelő reprezentációt ad a bemenetekről azok fontossága alapján. Ezenkívül egy elfogult kifejezés b ehhez az összeghez hozzáadódik a ∑wi*xi + b. A torzítás egy másik modellparaméterként szolgál (a súlyokon kívül), amely hangolható a modell teljesítményének javítása érdekében.

A második lépésben egy aktiválási funkció f a fenti összegre vonatkozik ∑wi*xi + b az Y = kimenethez f(∑wi*xi + b). A forgatókönyvtől és a használt aktiválási funkciótól függően a teljesítmény is kétkomponensű {1, 0} vagy folytonos érték. 

Perceptron működése

(Gyakran mindkét lépést egyetlen lépésként ábrázolják a többrétegű perceptronokban, itt két különböző lépésként mutattam be őket a jobb megértés érdekében)

Aktiválási funkciók

Egy biológiai neuron csak akkor tüzel, ha egy bizonyos küszöböt túllép. Hasonlóképpen, a mesterséges neuron is csak akkor fog tüzelni, ha a bemenetek összege (súlyozott összeg) túllép egy bizonyos küszöbértéket, mondjuk 0-t.

Ha ∑wi*xi + b > 0: kimenet = 1 egyébként: kimenet = 0

A grafikonja valami ilyesmi lesz:

Aktiválási funkciók

Ez valójában az egységlépés (küszöbérték) aktiválási funkció, amelyet eredetileg a Rosenblatt használt. De mint látható, ez a függvény 0-nál nem folytonos, így problémákat okoz a matematikai számításokban. A fenti függvény simább változata a szigmafüggvény. 0 és 1 között ad ki. Egy másik a hiperbolikus tangens(tanh) függvény, amely -1 és 1 közötti kimenetet állít elő. Mind a szigmoid, mind a tanh függvények eltűnő gradiens-problémákkal küzdenek. Manapság a ReLU és a Leaky ReLU a legnépszerűbb aktiválási funkciók. Viszonylag stabilak a mély hálózatokon.

Perceptron mint bináris osztályozó

Eddig a biológiai inspirációt és a perceptron matematikáját láttuk. Ebben a részben látni fogjuk, hogyan old meg egy perceptron egy lineáris osztályozási problémát.

Néhány könyvtár importálása –

innen: sklearn.datasets import make_blobs import matplotlib.pyplot mint plt import numpy mint np %matplotlib inline

Hamis adatkészlet generálása a segítségével make_blobs a scikit learning által biztosított funkcionalitás –

# X adatkészlet generálása, Y = make_blobs (n_funkciók = 2, központok = 2, n_samples = 1000, véletlenszerű állapot = 12)
# Adatkészlet megjelenítése plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Alap igazság', betűméret = 18) plt.show()
Perceptron mint bináris osztályozó

Tegyük fel, hogy a kék pontok 1-ek, a zöldek pedig 0-k. A perceptron logika segítségével létrehozhatunk egy döntési határt (hipersík) osztályozáshoz, amely elválasztja a különböző adatpontokat a grafikonon.

Mielőtt továbbmennénk, adjunk hozzá egy (egyes) torzítási tagot a bemeneti vektorhoz –

# Adjon hozzá egy torzítást a bemeneti vektorhoz X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Az adatkészlet valahogy így fog kinézni

adatbázisba

Itt a fenti adatkészlet minden sora a bemeneti vektort (egy adatpontot) jelenti. Ahhoz, hogy döntési határt hozzunk létre, meg kell találnunk a megfelelő súlyokat. A súlyokat az edzés során „tanuljuk meg” az alábbi szabály szerint:

w = w + (várható — előrejelzett) * x

Perceptron w

Ez azt jelenti, hogy a becsült eredményt kivonjuk az alapigazságból, majd ezt megszorozzuk az aktuális bemeneti vektorral, és hozzáadjuk a régi súlyokat, hogy megkapjuk a súlyok új értékét. Ha a kimenetünk megegyezik a tényleges osztállyal, akkor a súlyok nem változnak. De ha a becslésünk eltér az alapigazságtól, akkor a súlyok ennek megfelelően nőnek vagy csökkennek. Így történik a súlyok fokozatos beállítása minden iterációban.

Kezdjük azzal, hogy tetszőleges értékeket rendelünk a súlyvektorhoz, majd minden iterációban fokozatosan igazítjuk őket a hiba és a rendelkezésre álló adatok felhasználásával –

# súlyok inicializálása véletlenszerű értékekkel w = np.random.rand(3, 1) print(w)

output:

[[0.37547448] [0.00239401] [0.18640939]]

Határozza meg a perceptron aktiválási funkcióját

def activation_func(z): ha z >= 1: return 1 else: return 0

Ezután alkalmazzuk a perceptron tanulási szabályt -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Súlyok frissítése w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Nem garantált, hogy a súlyok egy menetben konvergálnak, ezért az összes képzési adatot 100-szor betápláljuk a perceptron algoritmusba, miközben folyamatosan alkalmazzuk a tanulási szabályt, így végül sikerül elérni az optimális súlyokat.

Most, hogy elértük az optimális súlyokat, mi megjósolni az osztályt minden adatponthoz Y = használatával f(∑wi*xi + b) vagy Y = wT.x vektor formában.

# az adatpontok osztályának előrejelzése result_class = [activation_func(w.transpose().dot(x)) for x in X_bias]

Vizualizálja a döntési határt és az előre jelzett osztálycímkéket –

# konvertálni egységvektorra w = w/np.sqrt(w.transpose().dot(w))
# Eredmények megjelenítése plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = eredmény_osztály) plt.plot([-10, -1], hipersík ([-10, -1], w), lw = 3, c = 'piros') plt.title('Perceptron osztályozás döntési határral') plt.show()
Perceptron osztályozás döntési határral

Összehasonlíthatja az alapigazság-képet a megjósolt eredményképpel, és megtekinthet néhány rosszul besorolt ​​pontot. Ha kiszámoljuk a pontosságot, akkor körülbelül 98% (ezt gyakorlatként az olvasókra bízom).

Ha látja, itt az eredeti adataink eléggé elkülönültek, így ilyen jó pontosságot tudunk kapni. De ez nem így van a valós adatok esetében. Egyetlen perceptron felhasználásával csak lineáris döntési határt tudunk megszerkeszteni, így ha az adatok keverednek, a perceptron algoritmus rosszul fog teljesíteni. Ez az egyetlen perceptron modell egyik korlátja.

Végjegyzetek

A Rosenblatt perceptronja mögött meghúzódó biológiai inspiráció megértésével kezdtük. Ezután áttértünk a perceptron matematikájára és az aktiválási függvényekre. Végül egy játék adatkészlet segítségével láthattuk, hogy a perceptron hogyan tud alapvető osztályozást végezni egy lineáris döntési határ felépítésével, amely elválasztja a különböző osztályokhoz tartozó adatpontokat.

A szerzőről

Pratik Nabriya egy képzett adattudós, aki jelenleg egy noidai székhelyű Analytics és AI cégnél dolgozik. Jártas a gépi tanulásban, a mély tanulásban, az NLP-ben, az idősoros elemzésben, az adatmanipulációban, az SQL-ben, a Pythonban, és jól ismeri a felhőkörnyezetben való munkát. Szabadidejében szeret Hackathonokon versenyezni, műszaki cikkeket írni.

A cikkben bemutatott média nem az Analytics Vidhya tulajdona, és a Szerző belátása szerint használja azokat.

Forrás: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Időbélyeg:

Még több Analytics Vidhya