Bevezetés a neurális hálózatokba
A videó egy egyszerű példán keresztül mutatja be, hogyan képes az emberi agy és a mesterséges neurális hálózat felismerni kézzel írott számokat 28×28 pixeles képekből. Bár az agy könnyedén azonosítja a számjegyeket, egy program megírása, amely ugyanezt teszi, bonyolult feladat.
A neurális hálózat alapjai
- Neuronok: Egyszerű egységek, amelyek 0 és 1 közötti számokat (aktivitásokat) tartalmaznak.
- Bemeneti réteg: 784 neuron, mindegyik egy pixel szürkeárnyalatát reprezentálja.
- Kimeneti réteg: 10 neuron, mindegyik egy számjegyet jelöl, aktivitásuk alapján történik a felismerés.
- Rejtett rétegek: Két réteg, egyenként 16 neuronnal, amelyek a bemeneti és kimeneti réteg között helyezkednek el.
Hogyan működik a rétegek közötti kapcsolat?
- Minden neuron a következő réteg neuronjainak aktivitását befolyásolja súlyok és torzítások segítségével.
- A súlyok meghatározzák, hogy mely pixelminták aktiválják a neuront (pl. élek, hurkok).
- A torzítás egy küszöbérték, amely alatt a neuron nem aktiválódik.
- Az aktivitásokat egy szigmoid (logisztikus) függvény alakítja 0 és 1 közé.
A súlyok és torzítások szerepe
- A hálózatban összesen kb. 13 000 súly és torzítás van, amelyek finomhangolják a működést.
- Ezek beállítása a tanulási folyamat lényege, amely során a hálózat megtanulja felismerni a számjegyeket.
Aktivációs függvények: szigmoid és ReLU
- A szigmoid függvény korábban általánosan használt, de nehéz vele tanítani mély hálózatokat.
- A ReLU (korrigált lineáris egység) egyszerűbb és hatékonyabb, ezért a modern hálózatokban elterjedt.
A neurális hálózat mint függvény
- A hálózat egy bonyolult, paraméterezett függvény, amely 784 bemeneti értéket (pixelek) alakít át 10 kimeneti értékké (számjegyek valószínűsége).
- A működés alapja a mátrixszorzás és az aktivációs függvények alkalmazása.
Összegzés
Ez a videó alapvető betekintést nyújt a neurális hálózatok működésébe, különösen a képfelismerés területén. Megérthetjük, hogyan kapcsolódnak össze a neuronok, hogyan hatnak egymásra a rétegek, és milyen matematikai eszközökkel dolgozik a hálózat. A következő részben a tanulási folyamatról lesz szó, amely megmutatja, hogyan állítja be a hálózat a súlyokat és torzításokat a felismeréshez.
További olvasmányok
- Understanding the Real Number System: Key Concepts and Definitions
- Understanding and Classifying Real Numbers: A Comprehensive Guide
- Understanding Linear Classifiers in Image Classification
- Understanding Data Representation in C Programming
- Guida ai Principali Insiemi dei Numeri: Naturali, Interi e Razionali
Ez egy hármas szám. Hanyagul írt és alacsony, 28 × 28 képpontos felbontásban lett beolvasva. Az agyadnak mégsem esik nehezére 3-as számként felismernie. Szerintem érdemes egy pillanatra elgondolkodni azon, mennyire elképesztő, hogy az agyad minden megerőltetés nélkül képes erre.
Hiszen ez a 3 ábra mind felismerhető hármasként annak ellenére, hogy az egyes képpontok nagyon különböznek egymástól. A szemedben lévő fényérzékeny sejtek, amelyek akkor "tüzelnek", mikor ezt a hármast látod
nagyrészt eltérnek azoktól, amelyek ennél a hármasnál kapnak jelet. De valami az őrülten intelligens vizuális kérgedben felismeri, hogy ezek egy és ugyanazon jelentés megnyilvánulásai, miközben más képeket meg más jelentésekkel társít.
De ha most azt mondanám neked, ülj le és írj nekem egy programot, amely beolvas egy 28 x 28-as rácsot és egyetlen számot ad ki 0-9 között, azt a számjegyet, amit felismerni vél? Nos, a feladat akkor a nevetségesen triviálisból hirtelen vért izzasztóan bonyolulttá válna.
Hacsak nem egy szikla alatt éltél eddig, valószínűleg aligha kell hangsúlyoznom a gépi tanulás és a neurális hálózatok fontosságát mind a jelenben mind a jövőre nézve. Most arról fogok beszélni, hogy pontosan mi is az a neurális hálózat.
Feltételezve az előismeretek hiányát és megpróbálva matekosan vizualizálni a működést. Mindössze annyit remélek, hogy a végén már nem gondolod azt, hogy ez egy motivációval rendelkező struktúra, és úgy érzed, tudod mire gondolj, amikor valahol olvasod vagy hallod a "neurális hálózat" kifejezést.
Ez a videó csak a struktúrával foglalkozik, a következő szól a tanulásról. Itt és most megpróbálunk egy olyan neurális hálózatot létrehozni, amely megtanulja felismerni a kézzel írott számokat. Ez egy klasszikus példa a téma bemutatására.
És itt örömmel ragaszkodom a status quo-hoz, mert a két videó végén mutatok majd néhány forrást, ahonnan még többet lehet megtudni, illetve ahonnan ez a program is letölthető majd, hogy bárki elbabrálhasson vele a számítógépén.
A neurális hálózatoknak nagyon sok változata létezik, és az elmúlt években nagyon felggyorsult ezeknek a kutatása, de e két bevezető videóban én csak az alapfelszereltségű, extrák nélküli verzióval foglalkozom.
Ez az előfeltétele a leghatékonyabb modern változatok megértésének és hidd el, hogy ez még így is elég bonyolult lesz.
Mégis ebben a legegyszerűbb formájában is képes lesz megtanulni a kézzel írt számjegyek felismerését. Ami azért elég menő képesség egy számítógép részéről. Ugyanakkor azt is látni fogod, hogy hogyan nem fogja beteljesíteni néhány reményünket.
Mint a neve is sugallja, a neurális hálózatokat az agy inspirálta. De nézzük közelebbről: mik azok a neuronok és hogyan kapcsolódnak egymáshoz? Amikor azt mondom, neuron, egy olyan dologra gondolj, ami egy számot tartalmaz.
Méghozzá egy 0 és 1 közötti számot - ez az egész tényleg nem több ennél. A hálózat egy halom neuronnal kezdődik, melyek mindegyike a bemeneti 28x28-as kép egy képpontjának felel meg. Ez összesen 784 neuron.
Mindegyik olyan számot tartalmaz, amely a megfelelő pixel szürkeárnyalatos értékét mutatja. A 0-s, fekete pixeltől egészen az 1-es, fehér pixelig. Ezt a számot a neuronban aktivitásnak nevezik.
Ha a neuron aktivitása magas, akkor a neuron tüzel. Ez a 784 neuron alkotja a hálózatunk első rétegét. Most az utolsó rétegre ugrunk: itt tíz neuron van, mindegyik egy számjegyet képvisel.
Az aktivitása ezeknek a neuronoknak is egy 0 és 1 közötti szám, ami azt mutatja meg, mennyire gondolja úgy a rendszer, hogy ennek a számnak felel meg a bemeneti kép. Van még néhány "rejtett réteg" is a hálózatban,
amit egyelőre jejlöljünk csak egy óriási kérdőjellel, hogy mégis hogy a manóba fogjuk megvalósítani a számfelismerés folyamatát… Ehhez a hálózathoz két rejtett réteget választottam, egyenként 16 neuronnal, és ez valójában egy önkényes választás.
Amiatt lett két réteg, hogy pontosan minek is akarom kitenni a struktúrát mindjárt, a 16 meg csak egyszerűen csak egy szép szám, jól illeszkedik a képernyőnkre. Valójában egy csomót lehet kisérletezni a legmegfelelőbb struktúrával…
Az aktivitások a hálózat adott rétegében meghatározzák a következő réteg aktivitásait. És persze a hálózat mint információfeldolgozó mechanizmus lényegi kérdése pontosan az, hogy hogyan eredményez az egyik réteg aktivitása a következő rétegben aktivitást.
Az egész nagyjából ahhoz hasonló elven működik, ahogy a biológiai hálózatokban is egy neuron-csoport tüzelésekor más neuronok is tüzelni kezdenek. A hálózat, amit most bemutatok
már be lett tanítva arra, hogy felismerje a számjegyeket. Hadd mutassam meg, mit értek ezalatt. Ha betáplálunk egy képet, ami a bemeneti réteg mind a 784 neuronját aktivizálja, a pixelek fényerőssége szerint,
akkor az aktivitások mintázata egy nagyon specifikus mintát generál a következő rétegben, ami a rákövetkező rétegben generál egy aktivitási mintázatot, ami végül a kimeneti rétegben hoz létre egy mintát.
És a kimenti réteg legfényesebb neuronja lesz végül a rendszer tippje arra nézve, hogy milyen szám van a képen. És mielőtt belevetnénk magunkat a matekba, hogy hogyan hatnak egymásra a rétegek vagy hogyan működik a betanítás, beszéljünk inkább arról, hogy egyáltalán miért lehet értelme elvárni egy réteges struktúrától, hogy intelligensen viselkedjen?
Mire számítunk itt? Mégis milyen viselkedést remélünk a középső rétegektől? Nos, amikor mi emberek számjegyeket ismerünk fel, különböző komponenseket illesztünk össze: a 9-es felül egy karika, jobb oldalon meg egy vonal. A 8-as szintén egy karika felül, plusz még egy karika alul.
A 4-est meg lényegében 3 konkrét vonal alkotja, stb. Namármost egy tökéletes világban remélhetnénk pl. azt, hogy az utolsó előtti rétegben minden neuron egy ilyen komponensnek felel meg, és
ha bármikor olyan képet töltünk be, aminek karika van a tetején, pl. 8-ast vagy 9-est akkor lesz olyan konkrét neuron aminek az aktivitása közel lesz az egyhez. És persze nem csak egyetlen féle karika, hanem mindenféle
felül elhelyezkedő hurok-szerű mintázat aktivizálja ezt a neuront. Így aztán a harmadik rétegből az utolsóba lépve csak azt kell megtanulnia, hogy mely részkomponensek kombinációja felel meg egy számjegynek. Ezzel persze csak kicsit odébbgörgettük a problémát,
Mert hogyan ismerné fel a komponenseket, vagy hogyan tudná, melyikhez melyik szám tartozik, és még mindig nem is beszéltem róla, hogyan hat egy réteg a következőre, de még egy kicsit időzzünk el itt. Egy hurok felismerése is tovább bontható.
Ennek egyik ésszerű módja az lenne, hogy először felismerjük a különböző kis éleket, amelyek felépítik. Hasonlóképpen azt a hosszú vonalat, ami az 1-es, 4-es és 7-es számjegyekben is szerepel, is tekinthetjük egy hosszú élnek, vagy akár több kisebb él meghatározott mintázatának is.
Szóval talán reménykedhetünk pl. abban, hogy a második réteg minden neuronja ezeknek a kis meghatározott éleknek felel meg. Lehet, hogy amikor ez a kép érkezik be, az összes olyan neuron tüzel
amely ezt a nyolc-tíz egyedi kis élt reprezentálja, amelyek aktiválják a felső hurokhoz és a hosszú függőleges vonalhoz kapcsolódó neuronokat, Amelyek végül a 9-eshez tartozó neuront kapcsolják be.
Az már más kérdés, hogy ez tényleg így zajlik-e le a hálózatunkban - de erre még visszatérek, miután megnéztük, hogyan kell betanítani a hálózatot. De ettől még persze reménykedhetünk benne, hogy ez ennek a réteges felépítésnek a célja.
Ráadásul gyanús, hogy a szélek és minták ilyesféle felismerése nagyon jól jönne más képfelismerési feladatokhoz is. És még a képfelismerésen túl is mindenféle intelligens dolog lebontható több absztrakciós rétegre. A beszédfelismerés például a nyers hanganyagból a különféle hangok kiválasztását jelenti, amelyek egyes szótagokat építenek fel,
melyek együttese szavakat alkot, melyek együttese pedig kifejezéseket és absztrakt gondolatokat stb. De térjünk vissza arra, hogy mindez hogy is működik. Képzeld el, hogy azt tervezed éppen meg, hogyan határozza meg egy réteg aktivitása a következő rétegét.
A cél létrehozni egy olyan mechanizmust, amely elképzelhetően kombinálja a képpontokat élekbe, vagy éleket mintákba vagy mintákat számjegyekbe. Vegyünk egy jól meghatározott esetet: Tegyük fel, hogy azt próbáljuk elérni,
hogy a második réteg egyik neuronja meg tudja mondani, hogy van-e itt él vagy sem. A kérdés az, hogy milyen paraméterek kellenek a hálózatnak ahhoz, milyen tárcsákat kell tudjunk úgy tekergetni, hogy azzal képesek legyünk kifejezni ezt a mintát.
Vagy bármilyen másik képpontmintát, olyanokat, amiket élekből vagy hurkokból összeállíthatunk? Azt fogjuk tenni, hogy súlyokat rendelünk e neuron és az első réteg neuronjai közé. Ezek a súlyok csak számok.
Aztán vesszük az összes aktivitást az első rétegből és kiszámoljuk a súlyozott összegüket. Szerintem szemléletes ezekre a súlyokra is úgy tekinteni, mintha ők is a saját kis rácsukba rendeződnének: zöld pixeket fogok használni a pozitív súlyok jelölésére, és pirosat a negatívokéra,
míg a pixelek fényereje a súlyok abszolút értékét jelöli. Na most, ha szinte az összes képponthoz tartozó súlyunk nulla, kivéve néhány pozitív súlyt ebben a régióban, amelyet vizsgálunk,
akkor lényegében a súlyozott összeg kiszámítása nem más, mint egyszerűen csak összegyűjteni a pixelértékeket ebben a régióban. És ha tényleg azt akarod, hogy itt egy élt találj, akkor célszerű negatív súlyt társítani
a környező képpontokhoz. Ezután az összeg akkor lesz a legnagyobb, ha a középső képpontok világosak, de a környező képpontok sötétek. Ilyen súlyozott összeg számításakor, bármilyen érték kijöhet,
de ehhez a hálózathoz az értékeknek 0 és 1 közé kell esnie. Így aztán az összeget valamiféle függvénybe kell csomagolnunk, ami megoldja ezt az "összenyomást".
Az egyik általános függvény, amivel ez megoldható a szigmoid, vagy más néven logisztikus függvény. Itt lényegében a nagyon negatív értékekből egy nulla közeli érték, nagyon pozitívakból 1 közeli érték lesz, 0 környezetében pedig monoton nő.
Vagyis a neuron aktivitása itt alapvetően attól függ, hogy mennyire pozitív a súlyozott összeg. Lehet viszont, hogy nem akarjuk, hogy a neuron már akkor tüzeljen, ha a súlyozott összeg nagyobb 0-nál. Lehet, hogy azt szeretnénk, hogy ez csak akkor történjen meg, ha 10-nél is nagyobb.
Vagyis kell egy küszöbérték, ameddig a neuron inaktív marad. Ennek érdekében csak hozzá kell adnunk a kifejezéshez egy negatív számot, mielőtt beküldenénk a szigmoid függvénybe.
Ezt a számot torzításnak nevezzük. Tehát a súlyok megmondják, milyen pixel-mintázatra reagál a neuron a második rétegben, míg a torzítás meghatározza, hogy mi az a minimális súlyozott összeg, ami felett a neuron tüzelni kezd.
És ez csak egyetlen neuron. A második réteg összes többi neuronja is ugyanúgy kapcsolódik az első réteg 784 neuronjához, és mind a 784 kapcsolathoz tartozik egy súly is.
Továbbá mindegyiknek van egy torzítási értéke is. Ez azért nem kevés számítanivaló: ez a rejtett réteg 16 neuronnal összesen 784 x 16 súly + még 16 torzítás.
És mindez csak az első rétegtől a másodikig tartó út. A többi réteg között is van egy halom súly és torzítás. Mindent számbavébe ennek a hálózatnak összesen
nagyjából 13.000 súlya és torzítása van. 13.000 tekergethető tárcsa, amivel a hálózat működése finomhangolható. Tehát, amikor a tanulásról beszélünk,
az lényegében az a folyamat, ahogy a számítógép megtalálja azt a beállítást, amivel az összes megadott problémára jó megoldást tud adni. Egy gondolatkísérlet -
szórakoztató és szörnyűséges: milyen lenne leülni és ezeket a súlyokat és torzításokat mind kézzel beállítgatni úgy, hogy a második réteg felismerje a széleket, a harmadik réteg a mintákat stb. Számomra ez a kielégítőbb gondolat annál, mintha a hálózat ezen részére csak mint egy fekete dobozra gondolnék.
Mert amikor a hálózat nem végzi jól a munkáját, de mi mégis tisztában vagyunk azzal, hogy a súlyok és torzítások hogyan épülnek a rendszerbe, van ötletünk, hogy hol kezdjünk neki a struktúra javításának. Vagy amikor bár működik a hálózat,
de nem azért és nem úgy, mint ahogy előre elképzeltük. A hálózat működésének a mélyére ásni segít letesztelni a kezdeti feltételezéseinket, és feltárni a lehetséges megoldások teljes spektrumát.
Amúgy a tényleges függvényt kicsit fárasztó lenne leírni, nem? Hadd mutassak egy tömörebb jelölést a kapcsolatok leírására. Ha később olvasol a témában, akkor is így fogsz ezzel találkozni.
Rendezzük a réteg összes aktivitását egy oszlopvektorba. Aztán rendezzük az összes súlyt egy mátrixba, aminek egy sora a hálózat egy rétege és a következő réteg egy neuronja közötti kapcsolatot írja le.
Ami azt jelenti, hogy az aktiválások súlyozott összege az első rétegben megegyezik a mátrix megfelelő sorvektorának és az oszlopvektornak a szorzatával. Mellesleg a gépi tanulás nagy része főleg a lineáris algebra jó megértésére épül.
Szóval ha bárki a mátrixok vizuális megértésére és mátrix szorzás megértésére vágyna, nézze meg a lineáris algebra sorozatomat is. Kiváltképp a harmadik fejezetét. A kifejezésünkre visszatérve - ahelyett, hogy egyenként hozzáadnánk minden torzítást,
inkább vektorba szervezzük ezeket is, és hozzáadjuk a mátrix-szorzathoz. Aztán végső lépésként az egész kifejezés bekerül a szigmoid függvénybe.
És ez azt jelenti, hogy a szigmoid függvényt az eredményként előálló vektor mindegyik elemére alkalmazni fogjuk. Végül ha a súlymátrixot és ezeket a vektorokat saját szimbólumukkal jelöljük,
tiszta és tömör formában tudjuk leírni az aktivitás átadását az egyik rétegről a másikra. Ezáltal a kód fontos része sokkal egyszerűbbé és gyorsabbá válik, mivel számos könyvtár optimalizálja a mátrix-műveleteket. Korábban megegyeztünk, hogy ezek a neuronok egyszerűen olyan dolgok, amelyek számokat tartalmaznak.
Persze a számok attól függnek, hogy milyen képet töltöttünk be. Valójában pontosabb úgy fogalmazni, hogy minden egyes neuron egy függvény. Amelynek az előző réteg összes neuronja egy változója, és egy nulla és egy közötti számot ad eredményül.
Valójában az egész neurális hálózat csak egy függvény. Ami 784 számot kap inputként és 10-et ad vissza. Egy rettenetesen komplikált függvény,
amely 13.000 paramétert tartalmaz súlyok és torzítások formájában, és amely számos mátrixszorzaton alkalmazza a szigmoid függvényt, de ettől még csak egy függvény. És amúgy meg még jó is, ha bonyolultnak tűnik.
Hiszen ha egyszerű lenne, akkor hogyan várhatnánk tőle, hogy felismerjen számjegyeket? És hogyan teszi ezt? Hogyan tudja beállítani saját magát pusztán azáltal, hogy adatokat olvas be? Ez az, amit a következő videóban mutatok be, illetve elmagyarázom, hogy pontosan mit is csinál ez a különleges hálózat.
Most kéne azt mondanom, hogy iratkozz fel, hogy ne maradj le semmilyen újdonságról, de legtöbbünk gondolom amúgy sem kap értesítést a Youtube-tól. Vagy még őszintében kérhetném ezt azért, hogy hadd higgye
a Youtube videó-ajánló neurális hálózata azt, hogy ettől a csatornától szeretnél tartalmat látni. Akárhogy is, figyeljétek a posztjaimat! Köszönjük mindenkinek, aki támogatja ezeket a videókat a patreonon!
A nyár folyamán kicsit lassan haladtam a valószínűségi sorozatommal. De ez után a projekt után folytatom újra, így a patreonosok is ott tudják figyelni a frissítéseket. A téma lezárásaként itt van velem Lisha Li, aki a PhD-jét
a deep learning (mély tanulás) elméleti oldalából írta, és jelenleg az Amplify Partners kockázatitőke-cégnél dolgozik, amely részben ezt a videót is finanszírozta. Lisha, amiről gyorsan szót kell ejtenünk, az a szigmoid függvény.
A korai hálózatok ezt használták, hogy a súlyozott összeget 0 és 1 közé normalizálják, a biológiai neuronok analógiájaként az inaktív és aktív állapot leképezésére … (Lisha) - Pontosan (3B1B) - De viszonylag kevés modern hálózat használ manapság szigmoidot. Kicsit elavult már? (Lisha) - Igen, vagy inkább
a ReLU sokkal könnyebben tanítható. (3B1B) - A "ReLU" korrigált lineáris egységet jelent, ugye? (Lisha) - Igen, ez egy olyan függvény, ami max(a,0)-t ad. Ahogy a videóban is rámutattál, és ami ezt motiválta,
az részben biológiai, és azzal analóg, ahogy a neuronok vagy aktiválódnak vagy sem. Ha egy bizonyos küszöbérték fölé megy,
akkor a függvény saját magát adja vissza, de ha nem, akkor nem akarunk aktiválást, így az érték legyen nulla - ez egyfajta egyszerűsítés. A szigmoidot egy ponton túl túl nehéz volt betanítani,
így aztán kipróbálták a ReLU-t, és az meg működött, méghozzá nagyon jól a mély neurális hálózatoknál. (3B1B) - Rendben.
Köszönöm, Lisha.
Heads up!
This summary and transcript were automatically generated using AI with the Free YouTube Transcript Summary Tool by LunaNotes.
Generate a summary for freeRelated Summaries

The Hidden Magic Behind Accessing Your Favorite Websites
Discover the complex technology and processes that power your internet experience.

The Hidden Magic Behind Browsing: How Your Data Travels the Internet
Discover the complex journey of data from click to display, revealing the tech behind seamless web browsing.

Understanding Linear Classifiers in Image Classification
Explore the role of linear classifiers in image classification and their effectiveness.

Understanding Reality: The Brain's Role in Perception
This video explores the intricate relationship between the human brain and our perception of reality. It delves into how our senses gather information, how the brain processes this data, and how our individual experiences shape our unique realities.

Understanding the Neuromuscular Junction: Mechanics of Muscle Contraction
Explore the neuromuscular junction process, including neurotransmitter action and muscle contraction mechanics.
Most Viewed Summaries

A Comprehensive Guide to Using Stable Diffusion Forge UI
Explore the Stable Diffusion Forge UI, customizable settings, models, and more to enhance your image generation experience.

Mastering Inpainting with Stable Diffusion: Fix Mistakes and Enhance Your Images
Learn to fix mistakes and enhance images with Stable Diffusion's inpainting features effectively.

How to Use ChatGPT to Summarize YouTube Videos Efficiently
Learn how to summarize YouTube videos with ChatGPT in just a few simple steps.

Pag-unawa sa Denotasyon at Konotasyon sa Filipino 4
Alamin ang kahulugan ng denotasyon at konotasyon sa Filipino 4 kasama ang mga halimbawa at pagsasanay.

Ultimate Guide to Installing Forge UI and Flowing with Flux Models
Learn how to install Forge UI and explore various Flux models efficiently in this detailed guide.