Dropout réteg

A túlillesztésről szóló bejegyzésben volt szó a Dropoutról, mint egy eszközről, amivel elkerülhetjük ezt a problémát. Most ezt fogjuk megnézni részletesebben.


Dropout teljesen kapcsolt hálózaton

Teljesen kapcsolt neurális hálózatok esetén egy p valószínűséggel kihagyunk neuronokat a hálózatból a Dropout során. Nézzünk egy példát. A normális teljesen csatolt hálózat így néz ki:

Ugye a A Mesterséges Neurális Hálózat alapjai — 1. részének (1) alapján tudjuk, hogy a:

(1)   z_j =  w_{0j} + \sum_{i=1}^n x_i w_{ij}

Ha dropoutot adunk a fenti hálózat rejtett rétegéhez akkor az valahogy így fog kinézni:

Vagyis lesz a rétegben olyan neuron amit kihagyunk.1 Maga a konkrét számítás pedig így változik: Létrehozunk egy új r_j változót, ami segítségével maszkoljuk a bemeneti x értékeket. Ez az új változó i dimenziójú Bernoulli eloszlás, ami p valószínűséggel veszi fel az 1-es értéket:

(2)   r_i =  \text{Bernoulli}(p)

(3)   \tilde{x}_i =  r_i \cdot x_i

(4)   z_j =  w_{0j} + \sum_{i=1}^n \tilde{x}_i w_{ij}

Végül is nem csinálunk más, mint egy kisebb hálózatot fogunk előállítani. De mi ennek az előnye? Két pozitívum van.

Egyrészt egy kisebb hálózat kevésbé hajlamos a túlillesztésre.

Másrészt, ha ezt a maszkolást nem csak egyszer hajtjuk végre a tanulás során, akkor lehetőségünk van más-más hálózatfelépítést kipróbálni egy tanulási cikluson belül. Általában a Neurális Hálózat könyvtárak minden egyes batch feldolgozása után új maszkot készítenek. Vagyis minden batcht más hálózaton fogjuk tanítani. A fenti példánál maradva ilyen esetben a következő batch esetén a hálózat így fog kinézni:

Miért jó ez? Emlékezzünk, hogy egy Neurális Hálózat létrehozása mindig több különböző randomizációt is igényel. Ennek megfelelően nem lesz két teljesen megegyező Hálózat a tréning végén. Mivel más-más állapotból indulnak ki. Végtelen számítási erőforrás esetén a legjobb megoldás erre a problémára az lenne, hogy átlagoljuk a különböző hálózatok eredményét. A Dropout ismétlése ezt az átlagolást szimulálja úgy, hogy nem növeljük a számítási igényt.

Dropout convolutional hálózaton

Általában convolutional rendszerekben Dropout helyette Batch normalizációt használunk. Ennek egyik oka, hogy a teljesen csatolt rendszerekhez képest itt kevesebb kapcsolat van, tehát nincs akkora szügségünk Dropoutra. A másik oka, hogy convolutional rendszerekben átlagoljuk a térbeli pozíciók eredményét. Ez lényegében megszünteti a Dropout hatását, ha a maszk minden térbeli pozícióban eltérő.

Példa

Nézzünk egy példát. Az alábbi kód a A túlillesztés problémája bejegyzésben ismert hálózat, csak kiegészítettem Dropout rétegekkel:


from keras.models import Sequential
from keras.layers import Dense, Dropout

from keras.models import Sequential
from keras.layers import Dense
model_dropout = Sequential()
model_dropout.add(Dense(trainsize*2,  activation = 'relu', input_dim=2))
model_dropout.add(Dropout(0.5))
model_dropout.add(Dense(trainsize*3,  activation = 'relu'))
model_dropout.add(Dropout(0.5))
model_dropout.add(Dense(trainsize*4,  activation = 'relu'))
model_dropout.add(Dropout(0.5))
model_dropout.add(Dense(trainsize*5,  activation = 'relu'))
model_dropout.add(Dropout(0.5))
model_dropout.add(Dense(2, activation = 'softmax'))
model_dropout.compile(loss='binary_crossentropy', optimizer='adam')

Az eredményt érdemes összevetni, a Dropout nélküli hálózat teljesítményével:

Érdekes látni, hogy míg Dropout nélkül a túlillesztés problémája kb. a 20 epoch után jelentkezik, addig a Dropaout alkalmazásakor a teszt és a tréning Loss egyaránt folyamatosan csökken.

Javaslatok Dropout használatára

  • Használjunk szélesebb hálózatot hozzá
  • Általában jó ha minden egyes nem convolutional rétegben alkalmazzuk.
  • Növeljük a tanulási rátát, ha Dropoutot használunk

Lábjegyzet

  1. Számítástechnikailag csak a következő rétegben a neuronhoz kapcsolódó súlyokat állítjuk 0-ra.

Irodalom

  1. Harrison Jansma:Dropout
  2. Jason Brownlee: Dropout Regularization in Deep Learning Models With Keras
  3. Jacob Reinhold: Dropout on convolutional layers is weird
  4. Leonardo Araujo dos Santos: Dropout Layer
  5. N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskever és R. Salakhutdinov: Dropout: A Simple Way to Prevent Neural Networks fromOverfitting

Hírdetés

Dropout réteg” bejegyzéshez egy hozzászólás

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s