[Szia! Üdvözöljük újra! Ha nem hivatkozott az „1. rész [Feature Extration] (csak, 7 perces olvasmány), akkor azt tanácsolom, hogy olvassa el a 2. rész áthaladása előtt. jobban megértheti a témaötletet és az adat-előfeldolgozási lépést.]

Használja a „Google Colab Jegyzetfüzetemet” az interaktív tanuláshoz!

Minden szakaszbanelőször elmagyarázom az „alkalmazott alapvet/hipotézist”, majd a vonatkozó „kódlogikával rendelkező kódokat” és az „eredménykimeneteket” az egységteszt-modellekhez, majd alkalmazom a fő modellre. Az összes szekvencia a végéig megmarad, és lépésenként elválasztva: X.x (ahol X = szakasz, x = allépések)Egyébként ezt a következő 3 szakaszban fogom felosztani: [1] Feature Extraction & I.P.-O.P. Teremtés. [2] Model Implementation (NN).[3] Zajcsökkentés.

Rendben, tehát mostanáig tárgyaljuk a szentimentális elemzés lényegét, a Neural_Network használata utáni okokat, a szöveges adatok előfeldolgozási lépéseit. Most térjünk át a Neural_Network Architecture-re.

A fázisok sorrendje:

Osztály létrehozásaclass Sentimental_Network:és beágyazott neurális hálózat architektúrája a következő módszerekkel…

  • Adat-előfeldolgozási módszer meghatározása phasedef pre_processing_data()
  • Határozza meg a hálózati architektúra fázisát. def network_architecture()
  • Képzési modell fázisdef train()
  • Tesztelési módszer fázisdef test()
  • Futtassa a parancsot: def run()

Lépés: 2.0 (osztály meghatározása)

A Python egy objektum-orientált programozási nyelv, és itt az osztálya mind a négy alapelemet képviseli. További részletekért tekintse meg ezt a «Python OOP-t. Ezeket fogjuk használni a kódunkban.

Itt a Sentimental_Network definiált osztály tartalmazza a hálózat teljes megvalósítását. A „__init__”a python fenntartott metódusa más módszerek megvalósításához. konstruktorként ismert. Itt a _ vagy __ neve kapszulázás. Tehát ennek definiálása után az osztályt a hálózaton kívülről nem tudjuk tovább módosítani. A „én” a példány megjelenítésére is fenntartva. nos, a self.pre_process_data() és a self.network_architecture() támogató módszerek, amelyeket később tárgyalunk.

Lépés: 2.1 (előfeldolgozási fázis)

Ezt a metódust már az __init__-ban hívják, és ahogyan azt már tárgyaltuk az [1. rész: Feature Extraction] részben. Összegzésképpen azonban először létrehozunk egy készletet, és hozzáadunk egy feltöltött készletet az összes véleményben használt szavakkal. Ugyanaz a folyamat a címkékhez, és hozzon létre egy készletet az összes POZITÍV ÉS NEGATÍV címkékből ugyanabban a sorrendben. A második lépésben ezt a készletet sorok gyűjteményévé alakítjuk (szó, index), hogy az előrejelzés után kezeljük a bemeneti és kimeneti adatkészletet.

Lépés: 2.2 (Network_architecture fázis)

Ismét mindent részletesen átgondolok, így hosszadalmas, elnézést érte!

  • A def network_architecture(self,#input,#output,lr) metódussal létrehozzuk a szükséges bemeneti paramétereket egy neurális hálózathoz. itt, ahogy definiáltam, nincs. bemeneti csomópontok és kimeneti csomópontok. tehát mindenekelőtt ezek a bemeneti csomópontok az input_nodes-okkal generálva. 74 074 szavunk van, tehát hosszú [1 74 074] méretű tenzort fog generálni a bemeneti réteg számára. A képzési szakaszban további rétegek kerülnek hozzáadásra.
  • A Weight_initialization az egyik fontos paraméter, amely meghatározza a hálózat teljesítményét, hogy mennyire hatékonyan inicializálja súlyát.

  • Ha ezt a tételt hidden_nodes**-0.5ra használja, akkor jobb eredményt fog adni, mint output_nodes**-0.5. Mivel több rejtett_rétegű neuronnal fog működni, segít a hálózat gyorsabb betanításában 0,01 tanulási rátával, mint 0,001 (kimeneti_csomópontokkal). [kérem, ellenőrizze, ha akarja].
  • A végrehajtási szakaszban a learning_rate betűről beszélünk.
  • A Kimenetben azonban csak azt kell besorolnunk, hogy „Ez a vélemény pozitív vagy negatív címkével van ellátva? “ Ehhez a szigmafüggvényt használják.

Szigmoid funkció:

Itt a szigmoid függvény az „(egy elemű) e hatványa adja meg az egyetlen elem számértékét, és osztja az e hatványával(összeg(elemek))” egyszerűsített formája. arányt ad vissza, értéke pedig (0 és 1) között lesz. Ha a valószínűség 0,5 felett van, akkor POZITÍV(1)-re utal, ellenkező esetben NEGATÍV(0). [A szigmoid függvény részletesen]

Lépés: 2.3 (határozza meg a képzési fázist)

A képzéshez a bemenet és a kimenet kötelező paraméterek. Itt gondoskodnunk kell arról, hogy a bemenetek és a kimenetek számát illessze egymáshoz, különben edzés után sem szabad megfelelően párosítani őket, és hibákat kapunk ("határon kívül [index]" ).

Minden neurális hálózat egyedi adatokkal működik. Az egyszerű osztályozási modellezés során a NeuralNet valójában megpróbálja 2D-s vagy 3D-s gráfban ábrázolni adatainkat, és osztályozni (felosztani) egy egyenessel (lineáris/nemlineáris) vagy síkkal. Ennek érdekében különböző rétegeken halad át, és minden alkalommal különböző minták készítésével csökkentette a réteg méretét. Az előrejelzés során ezek a minták valamilyen specifikus kimenethez kapcsolódnak, és ezeknek a mintáknak a tényleges kimenethez való közelségének foka megadja számunkra a valószínűséget és a legmagasabb valószínű forgatókönyvet, amelyet outputnak tekintünk. [kérjük, olvassa el kétszer].

Amint fentebb látható,

  • Az első bemenet (X) és a W_0_1 pontmátrix szorzás közbülső kimenetet ad layer_1-nek, és aktiváló függvény esetén a képlete szerint szűrőként fog működni. akkor ez az áramlás ugyanúgy működik új súlyú rétegekkel. És végül adja meg a kimenetet (poz/neg) x érték szerint (for, x ‹ vagy › 0,5)
  • Ha tényleges kimenetet kap, akkor a Forward networks befejezi önmagát, de ha a hálózati kimenetünket a tényleges célokkal (valódi címkékkel) egyeztetjük, akkor hibát jelez. Induláskor a hibák sokkal nagyobbak, mint amire számítottunk. De itt működik a visszaszaporítás fő lényege.
  • A visszaszaporítás az összes hibát veszi, és fordított sorrendben tükrözi a rétegekre (azaz a teljes hibát elosztja a rétegekben és az egyes rétegek egyes neuronjaiban (súlyeloszlásuk szerint). Így most minden neuronnak lehetősége van módosítani a súlyát a kimeneti valószínűség maximalizálása érdekében.
  • Értsük meg a minták alapján. Ebben a vonatkozásban minden neuron súlya frissíti önmagát oly módon, hogy egy fontosabb minta neuronjának súlya nagyobb lesz, mint másoké. Ily módon az ilyen fontos neuronok összhatása hatékonyan magas és jobb teljesítményt ad.

Így a neurális hálózatunk javítja a teljesítményét a súlyok és torzítások (itt torzítás=0) beállításával, amelyeket ennek megfelelően hangolási paramétereknek nevezünk.

Lépés: 2.4 (határozza meg a tesztelési fázist)

A tesztelési fázis csak előre terjedést tartalmaz, és a run() metódus definiálásával tökéletes kimenetet kapunk. A tesztelés során csak le kell futtatnunk a Forward pass-ot (ugyanúgy, mint az edzésen), és össze kell hasonlítanunk az elért teljesítményünket egy valódival. Itt a hiba mellett kaphatunk igazat vagy hamisat is az eredményre.

Lépés: 2.5 Végrehajtási fázis:

Itt először a model_0-t definiálom megfelelő paraméterekkel, az utolsó 1000 kivételével minden adatot veszek a hálózatdefiniáláshoz és a betanítási módhoz. Mivel a tesztelési adatok mindig újak (ismeretlenek) a hálózat számára. Itt a végrehajtás során a learning_rate = 0.1, és ahogy korábban kijelentettem, ez az egyik hiperparaméter a NeuralNet számára, ezért mélyen meg kell értenünk a tanulási sebességet.

Tanulási_arány

Kódunkban a tanulási sebességet használjuk a súlyok frissítésére. tehát a matematikai modellezés szerint súlyfrissítéskor használjuk visszaszaporításnál. Meghatározza, milyen gyorsan alkalmazkodik a testsúlyunk. Értsük meg példával

Példa: Ha a hálózatunk korábbi súlya (W_old= 0,5), és most a visszaterjesztés azt javasolja neki, hogy állítsa vissza alaphelyzetbe valamilyen hiba miatt (vegyünk 0,1-et). ), ami azt jelenti, hogy az új súly „W_new” értéke [0,5 – 0,1 = 0,4] lesz, de a képletünk azt javasolja, hogy szorozzuk meg a learning_rate értékkel, akkor a képlet szerint ugyanaz a frissítés fog működni, mint W_new = [0,5 – (tanulási_arány= 0,1) * 0,1 = 0,49]. De mi van akkor, ha a tanulási arányunk 0,01? nyilvánvalóan W_new = [0,5 — (tanulási_sebesség= 0,01) * 0,1 = 0,499] értéket ad. Ily módon a learning_rate határozza meg a valós kimenetet.

Ha megpróbál matematikailag gondolkodni, akkor a hálózat gradiens süllyedésének sebessége határozza meg a hálózatunk veszteségfüggvényének meredekségét, hogy milyen meredek lesz a görbénk. és milyen gyorsan érjük el a veszteséggörbe legalacsonyabb pontját (legkisebb hiba, … a valós érték maximalizálásának valószínűségét jelenti) az alábbiak szerint.

Általában az ML gyakorló a 0,001-től 0,9-ig terjedő tartományt használja, de az én személyes döntésem az, hogy először a 0,01-et ellenőrizem, és megpróbálom a 0,1-et és a 0,001-et, és a grafikon lejtőjéből megpróbálom tovább választani a tanulási sebességet. Mert amikor (0.0001,0.001,0.01,0.1,1) fogod használni, akkor valójában az exponenciális növekedésnek nevezett speciális módon dolgozol. (Hogyan? ›››1 /0,1 = 10, 1/0,01 = 100, 1/0,001 =1000 10-es tényező 10²-es növekedés mellett)

Most pedig lássuk a modellünk teljesítményét eltérő tanulási arány mellett.

Megjegyzés: esetünkben a modell teljesítménye a hálózat pontosságát és sebességét jelenti.

Model_0 =› tanulási_ráta : 0,1

Model_1 =› tanulási_ráta :0,01

Model_2 =› learning_rate : 0,001

Kérjük, vegye figyelembe a különböző modellek pontosságát és sebességét, és tökéletesen megkapja a tanulási sebesség fogalmát.

Ahogy már kértem, ez a téma csendesen hosszadalmas, ezért igyekszem három részre bontani, hogy egyértelmű megértést adjon. A következő részben a [Kattintson ide] ›› „Zajcsökkentés érzelmi neurális hálózathoz” témakört tárgyaljuk, mindegyik hipotézist részletesen tartalmazza, majd megvitatjuk azok hatását az itt betanított modellünkre.

Köszönöm hogy elolvastad. Továbbra is mindent megtettem, ha van javaslata. Kérlek írd meg kommentben. Ha tetszik a munkám, kérjük, mutasd meg érzéseidet azzal, hogy „tapsol” és oszd meg ismerőseiddel, ez segít megőrizni a motivációmat.

Életem mottója: „Tovább tanulj, élvezd a felhatalmazást”