Merge pull request #494 from microsoft/update-translations
🌐 Update translations via Co-op Translator
This commit is contained in:
commit
04c43cd5c9
|
|
@ -13,7 +13,7 @@
|
|||
"\n",
|
||||
"> Tämä muistikirja on osa [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners). Vieraile repositoriossa saadaksesi täydellisen oppimateriaalikokoelman.\n",
|
||||
"\n",
|
||||
"Kuten olemme keskustelleet, perceptron mahdollistaa **binääriluokitteluongelman** ratkaisemisen, eli syöte-esimerkkien luokittelun kahteen luokkaan - voimme kutsua niitä **positiivisiksi** ja **negatiivisiksi**.\n",
|
||||
"Kuten olemme keskustelleet, perceptron mahdollistaa **binääriluokitteluongelman** ratkaisemisen, eli syöte-esimerkkien luokittelun kahteen luokkaan - voimme kutsua niitä **positiiviseksi** ja **negatiiviseksi**.\n",
|
||||
"\n",
|
||||
"Aloitetaan ensin tuomalla tarvittavat kirjastot.\n"
|
||||
]
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Plottakaamme myös datasetti:\n"
|
||||
"Piirretään myös datasetti:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -152,9 +152,9 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"## Perceptroni\n",
|
||||
"## Perceptron\n",
|
||||
"\n",
|
||||
"Koska perceptroni on binaariluokitin, jokaiselle syötevektorille $x$ perceptronimme tuottaa joko +1 tai -1 riippuen luokasta. Tuloste lasketaan kaavalla\n",
|
||||
"Koska perceptron on binaariluokitin, jokaiselle syötevektorille $x$ perceptronin tuottama ulostulo on joko +1 tai -1 riippuen luokasta. Ulostulo lasketaan kaavalla\n",
|
||||
"\n",
|
||||
"$$y(\\mathbf{x}) = f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x})$$\n",
|
||||
"\n",
|
||||
|
|
@ -166,7 +166,7 @@
|
|||
" \\end{cases} \\\\\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Kuitenkin yleisessä lineaarimallissa tulisi olla myös bias, eli ihanteellisesti meidän tulisi laskea $y$ muodossa $y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. Mallin yksinkertaistamiseksi voimme poistaa tämän bias-termin lisäämällä syöteominaisuuksiimme yhden lisäulottuvuuden, joka on aina arvoltaan 1:\n"
|
||||
"Kuitenkin yleisessä lineaarisessa mallissa tulisi olla myös bias, eli ihanteellisesti meidän tulisi laskea $y$ muodossa $y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. Mallin yksinkertaistamiseksi voimme poistaa tämän bias-termin lisäämällä syöteominaisuuksiin yhden lisäulottuvuuden, joka on aina arvoltaan 1:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -206,11 +206,11 @@
|
|||
"source": [
|
||||
"## Koulutusalgoritmi\n",
|
||||
"\n",
|
||||
"Jotta voimme kouluttaa perceptronin, meidän täytyy löytää painot $\\mathbf{w}$, jotka minimoivat virheen. Virhe määritellään käyttäen **perceptronin kriteeriä**:\n",
|
||||
"Jotta voimme kouluttaa perceptronin, meidän täytyy löytää painot $\\mathbf{w}$, jotka minimoivat virheen. Virhe määritellään **perceptronin kriteerin** avulla:\n",
|
||||
"\n",
|
||||
"$$E(\\mathbf{w}) = -\\sum_{n \\in \\mathcal{M}}\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}_{n}t_{n}$$\n",
|
||||
" \n",
|
||||
" * $t_{n} \\in \\{-1, +1\\}$ negatiivisille ja positiivisille opetusnäytteille, vastaavasti\n",
|
||||
" * $t_{n} \\in \\{-1, +1\\}$ negatiivisille ja positiivisille koulutusnäytteille, vastaavasti\n",
|
||||
" * $\\mathcal{M}$ - väärin luokiteltujen esimerkkien joukko\n",
|
||||
" \n",
|
||||
"Käytämme **gradienttimenetelmää**. Aloittaen satunnaisilla alkuarvoilla $\\mathbf{w}^{(0)}$, säädämme painoja jokaisella koulutusaskeleella virheen $E$ gradientin avulla:\n",
|
||||
|
|
@ -379,7 +379,7 @@
|
|||
"source": [
|
||||
"## Arvioi testidatalla\n",
|
||||
"\n",
|
||||
"Alussa olemme erottaneet osan datasta testidatasettiin. Katsotaan, kuinka tarkka luokittelijamme on tällä testidatasetillä. Tätä varten laajennamme testidatasetin lisäulottuvuudella, kerromme painomatriisilla ja varmistamme, että saatu arvo on samanmerkkinen kuin tunniste (+1 tai -1). Tämän jälkeen laskemme yhteen kaikki totuusarvot ja jaamme testinäytteen pituudella saadaksemme tarkkuuden:\n"
|
||||
"Alussa olemme erottaneet osan datasta testidatasettiin. Katsotaan, kuinka tarkka luokittelijamme on tällä testidatasetillä. Tätä varten laajennamme testidatasetin ylimääräisellä ulottuvuudella, kerromme painomatriisilla ja varmistamme, että saatu arvo on samanmerkkinen kuin tunniste (+1 tai -1). Tämän jälkeen laskemme yhteen kaikki totuusarvot ja jaamme testinäytteen pituudella saadaksemme tarkkuuden:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -420,7 +420,7 @@
|
|||
"source": [
|
||||
"## Havainnoimassa koulutusprosessia\n",
|
||||
"\n",
|
||||
"Olemme aiemmin nähneet, kuinka tarkkuus heikkenee koulutuksen aikana. Olisi mielenkiintoista nähdä, miten erotusviiva käyttäytyy koulutuksen aikana. Alla oleva koodi visualisoi kaiken yhdellä graafilla, ja sinun pitäisi pystyä siirtämään liukusäädintä \"aikamatkustaaksesi\" koulutusprosessin läpi.\n"
|
||||
"Olemme aiemmin nähneet, kuinka tarkkuus heikkenee koulutuksen aikana. Olisi mielenkiintoista nähdä, miten erottelulinja käyttäytyy koulutuksen aikana. Alla oleva koodi visualisoi kaiken yhteen graafiin, ja sinun pitäisi pystyä siirtämään liukusäädintä \"aikamatkailun\" avulla koulutusprosessin läpi.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -528,7 +528,7 @@
|
|||
"source": [
|
||||
"## Perceptronin rajoitukset\n",
|
||||
"\n",
|
||||
"Kuten yllä on nähty, perceptron on **lineaarinen luokittelija**. Se pystyy erottamaan kaksi luokkaa hyvin, jos ne ovat **lineaarisesti erotettavissa**, eli ne voidaan erottaa suoralla viivalla. Muussa tapauksessa perceptronin koulutusprosessi ei konvergoi.\n",
|
||||
"Kuten yllä on nähty, perceptron on **lineaarinen luokittelija**. Se pystyy erottamaan kaksi luokkaa hyvin, jos ne ovat **lineaarisesti erotettavissa**, eli ne voidaan erottaa suoralla viivalla. Muussa tapauksessa perceptronin koulutusprosessi ei tule konvergoimaan.\n",
|
||||
"\n",
|
||||
"Yksi ilmeisimmistä esimerkeistä ongelmasta, jota perceptron ei voi ratkaista, on niin sanottu **XOR-ongelma**. Haluamme, että perceptron oppii XOR-loogisen funktion, jonka totuustaulukko näyttää tältä:\n",
|
||||
"\n",
|
||||
|
|
@ -612,13 +612,13 @@
|
|||
"\n",
|
||||
"Vaikka perceptron ei pysty ratkaisemaan XOR-ongelmaa, se voi ratkaista monia paljon monimutkaisempia ongelmia, kuten käsinkirjoitettujen merkkien tunnistamisen.\n",
|
||||
"\n",
|
||||
"Koneoppimisen hallitsemisessa usein käytetty tietoaineisto on nimeltään [MNIST](https://en.wikipedia.org/wiki/MNIST_database). Sen on luonut Modified National Institute of Standards and Technology, ja se sisältää 60000 käsinkirjoitettua numeroa harjoitusaineistona, jotka on kerätty noin 250 opiskelijalta ja instituutin työntekijältä. Lisäksi on olemassa testiaineisto, joka sisältää 10000 numeroa, kerätty eri henkilöiltä.\n",
|
||||
"Koneoppimisen hallitsemisessa usein käytetty datasetti on nimeltään [MNIST](https://en.wikipedia.org/wiki/MNIST_database). Sen on luonut Modified National Institute of Standards and Technology, ja se sisältää 60000 käsinkirjoitettua numeroa harjoitusjoukossa, jotka on kerätty noin 250 opiskelijalta ja instituutin työntekijältä. Lisäksi on olemassa testidatasetti, joka sisältää 10000 numeroa, kerätty eri henkilöiltä.\n",
|
||||
"\n",
|
||||
"Kaikki numerot on esitetty harmaasävykuvina, joiden koko on 28x28 pikseliä.\n",
|
||||
"\n",
|
||||
"> MNIST-tietoaineisto on saatavilla harjoituskilpailuna [Kaggle](https://www.kaggle.com/c/digit-recognizer)-sivustolla, joka järjestää koneoppimiskilpailuja ja -haasteita. Kun opit luokittelemaan MNIST-numeroita, voit lähettää ratkaisusi Kaggleen nähdäksesi, miten se arvioidaan muiden osallistujien joukossa.\n",
|
||||
"> MNIST-datasetti on saatavilla harjoituskilpailuna [Kaggle](https://www.kaggle.com/c/digit-recognizer)-sivustolla, joka järjestää koneoppimiskilpailuja ja -haasteita. Kun opit luokittelemaan MNIST-numeroita, voit lähettää ratkaisusi Kaggleen nähdäksesi, miten se arvioidaan muiden osallistujien joukossa.\n",
|
||||
"\n",
|
||||
"Aloitamme lataamalla MNIST-tietoaineiston:\n"
|
||||
"Aloitamme lataamalla MNIST-datasetin:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -636,7 +636,7 @@
|
|||
"# In this case correct the link to the dataset below as well.\n",
|
||||
"\n",
|
||||
"with gzip.open('../../data/mnist.pkl.gz', 'rb') as mnist_pickle:\n",
|
||||
" MNIST = pickle.load(mnist_pickle)"
|
||||
" MNIST = pickle.load(mnist_pickle, encoding='latin1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -834,7 +834,7 @@
|
|||
"\n",
|
||||
"Siirrä liukusäädintä johonkin kohtaan harjoittelun loppupuolella ja tarkkaile vasemmalla näkyvää painomatriisia. Tämä matriisi auttaa sinua ymmärtämään, miten perceptron toimii. Voit nähdä korkeat painoarvot kentän keskellä, jotka vastaavat pikseleitä, jotka ovat tyypillisesti läsnä numerolle 1, ja matalat negatiiviset arvot reunoilla, joissa ovat numeron 0 osat. Joten, jos perceptronille esitetty numero on todellisuudessa 1, sen keskiosa kerrotaan korkeilla arvoilla, mikä tuottaa positiivisen tuloksen. Toisaalta, kun perceptron havaitsee numeron 0, vastaavat pikselit kerrotaan negatiivisilla luvuilla.\n",
|
||||
"\n",
|
||||
"> Saatat huomata, että jos annamme perceptronille numeron 1, joka on hieman siirtynyt vaakasuunnassa niin, että sen pikselit ovat kohdassa, jossa on numeron 0 pystysuoria osia, voimme saada virheellisen tuloksen. Koska MNIST-datasetin luonne on sellainen, että kaikki numerot on keskitetty ja sijoitettu oikein, perceptron luottaa tähän erottaakseen numerot toisistaan.\n",
|
||||
"> Saatat huomata, että jos annamme perceptronille numeron 1, joka on hieman siirtynyt vaakasuunnassa niin, että sen pikselit ovat kohdissa, joissa on numeron 0 pystysuoria osia, voimme saada virheellisen tuloksen. Koska MNIST-datasetin luonne on sellainen, että kaikki numerot on keskitetty ja sijoitettu oikein, perceptron luottaa tähän erottaakseen numerot toisistaan.\n",
|
||||
"\n",
|
||||
"Kokeillaan nyt eri numeroita:\n"
|
||||
]
|
||||
|
|
@ -912,11 +912,11 @@
|
|||
"source": [
|
||||
"## Keskustelu\n",
|
||||
"\n",
|
||||
"Jostain syystä 2 ja 5 eivät ole yhtä helposti erotettavissa. Vaikka saavutamme suhteellisen korkean tarkkuuden (yli 85 %), voimme selvästi nähdä, kuinka perceptron lakkaa oppimasta jossain vaiheessa.\n",
|
||||
"Jostain syystä 2 ja 5 eivät ole yhtä helposti erotettavissa. Vaikka saavutamme suhteellisen korkean tarkkuuden (yli 85 %), voimme selvästi nähdä, kuinka perceptron lopettaa oppimisen jossain vaiheessa.\n",
|
||||
"\n",
|
||||
"Ymmärtääksemme, miksi näin tapahtuu, voimme kokeilla käyttää [Principal Component Analysis](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA). Se on koneoppimistekniikka, jota käytetään syötedatan ulottuvuuden pienentämiseen siten, että luokkien välinen erotettavuus saadaan mahdollisimman hyväksi.\n",
|
||||
"\n",
|
||||
"Meidän tapauksessamme syötekuvassa on 784 pikseliä (syöteominaisuuksia), ja haluamme käyttää PCA:ta vähentääksemme parametrien määrän kahteen, jotta voimme piirtää ne graafille. Nämä kaksi parametria olisivat alkuperäisten ominaisuuksien lineaarinen yhdistelmä, ja voimme nähdä tämän prosessin ikään kuin \"kiertämisenä\" alkuperäisessä 784-ulotteisessa tilassa ja sen projisointina 2D-tilaan, kunnes saamme parhaan näkymän, joka erottaa luokat.\n"
|
||||
"Meidän tapauksessamme syötekuvassa on 784 pikseliä (syöteominaisuuksia), ja haluamme käyttää PCA:ta vähentääksemme parametrien määrän kahteen, jotta voimme piirtää ne graafiin. Nämä kaksi parametriä olisivat alkuperäisten ominaisuuksien lineaarinen yhdistelmä, ja voimme nähdä tämän prosessin ikään kuin \"kiertäisimme\" alkuperäistä 784-ulotteista avaruuttamme ja tarkkailisimme sen projektioita 2D-avaruuteen, kunnes saamme parhaan näkymän, joka erottaa luokat.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1026,16 +1026,16 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"Kuten näet, 0 ja 1 voidaan selvästi erottaa suoralla viivalla. Tämä osoittaa, että alkuperäisessä 784-ulotteisessa avaruudessa numerot vastaavat pisteet ovat myös lineaarisesti erotettavissa. Tapauksessa 2 ja 5 emme kuitenkaan voi löytää hyvää projektioita, joka erottaisi numerot selkeästi, ja siksi on joitakin virheellisen luokittelun tapauksia.\n",
|
||||
"Kuten näet, 0 ja 1 voidaan selvästi erottaa suoralla viivalla. Tämä osoittaa, että alkuperäisessä 784-ulotteisessa avaruudessa numerot vastaavat pisteet ovat myös lineaarisesti erotettavissa. Tapauksessa 2 ja 5 emme kuitenkaan löydä hyvää projektioita, joka erottaisi numerot selkeästi, ja siksi on joitakin virheellisen luokittelun tapauksia.\n",
|
||||
"\n",
|
||||
"> Myöhemmin tällä kurssilla opimme luomaan epälineaarisia luokittelijoita käyttäen neuroverkkoja ja käsittelemään ongelmaa, jossa numerot eivät ole kunnolla linjassa. Hyvin pian saavutamme yli 99 % tarkkuuden MNIST-numeroiden luokittelussa, kun luokittelemme ne 10 eri luokkaan.\n",
|
||||
"> Myöhemmin tällä kurssilla opimme luomaan epälineaarisia luokittelijoita käyttämällä neuroverkkoja ja käsittelemään ongelmaa, jossa numerot eivät ole kunnolla linjassa. Hyvin pian saavutamme yli 99 % tarkkuuden MNIST-numeroiden luokittelussa, kun luokittelemme ne 10 eri luokkaan.\n",
|
||||
"\n",
|
||||
"## Yhteenveto\n",
|
||||
"\n",
|
||||
" * Olemme oppineet yksinkertaisimman neuroverkon arkkitehtuurin - yhden kerroksen perceptronin.\n",
|
||||
" * Olemme toteuttaneet perceptronin \"käsin\" käyttäen yksinkertaista koulutusmenetelmää, joka perustuu gradienttilaskentaan.\n",
|
||||
" * Yksinkertaisuudestaan huolimatta yhden kerroksen perceptron voi ratkaista melko monimutkaisia käsinkirjoitettujen numeroiden tunnistustehtäviä.\n",
|
||||
" * Yhden kerroksen perceptron on lineaarinen luokittelija, ja siksi se tarjoaa saman luokittelutehon kuin logistinen regressio.\n",
|
||||
" * Yksinkertaisuudestaan huolimatta yhden kerroksen perceptron pystyy ratkaisemaan melko monimutkaisia käsinkirjoitettujen numeroiden tunnistustehtäviä.\n",
|
||||
" * Yhden kerroksen perceptron on lineaarinen luokittelija, ja siksi sen luokittelukyky vastaa logistista regressiota.\n",
|
||||
" * Näyteavaruudessa perceptron voi erottaa kaksi syöteaineiston luokkaa hyperpinnan avulla.\n"
|
||||
]
|
||||
},
|
||||
|
|
@ -1045,7 +1045,7 @@
|
|||
"source": [
|
||||
"## Tekijätiedot\n",
|
||||
"\n",
|
||||
"Tämä muistikirja on osa [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners) -ohjelmaa, ja sen on laatinut [Dmitry Soshnikov](http://soshnikov.com). Se on saanut inspiraationsa Microsoft Research Cambridgen Neural Network Workshopista. Osa koodista ja havainnollistavista materiaaleista on otettu esityksistä, jotka ovat tehneet [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) ja [Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/), sekä [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) -arkistosta.\n"
|
||||
"Tämä muistikirja on osa [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners) -ohjelmaa, ja sen on laatinut [Dmitry Soshnikov](http://soshnikov.com). Se on saanut inspiraationsa Microsoft Research Cambridgen Neural Network Workshopista. Osa koodista ja havainnollistavista materiaaleista on otettu [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) ja [Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/) esityksistä sekä [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) -arkistosta.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1081,8 +1081,8 @@
|
|||
"start_slideshow_at": "selected"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "29c32e04af0f53fc4ecf6d87d5136f37",
|
||||
"translation_date": "2025-08-28T21:12:32+00:00",
|
||||
"original_hash": "914fc55f59efc7e17b8130d4033ac617",
|
||||
"translation_date": "2025-08-28T22:22:36+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb",
|
||||
"language_code": "fi"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
"\n",
|
||||
"> מחברת זו היא חלק מ-[AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners). בקרו במאגר לקבלת סט מלא של חומרי לימוד.\n",
|
||||
"\n",
|
||||
"כפי שדיברנו, פרספטרון מאפשר לפתור **בעיית סיווג בינארי**, כלומר לסווג דוגמאות קלט לשתי קטגוריות - נוכל לקרוא להן **חיובי** ו-**שלילי**.\n",
|
||||
"כפי שדיברנו, פרספטרון מאפשר לפתור **בעיית סיווג בינארית**, כלומר לסווג דוגמאות קלט לשתי קטגוריות - נוכל לקרוא להן **חיובית** ו-**שלילית**.\n",
|
||||
"\n",
|
||||
"ראשית, בואו נייבא כמה ספריות נדרשות.\n"
|
||||
]
|
||||
|
|
@ -158,7 +158,7 @@
|
|||
"\n",
|
||||
"$$y(\\mathbf{x}) = f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x})$$\n",
|
||||
"\n",
|
||||
"כאשר $\\mathbf{w}$ הוא וקטור משקלים, ו-$f$ היא פונקציית הפעלה מדרגה:\n",
|
||||
"כאשר $\\mathbf{w}$ הוא וקטור משקלים, ו-$f$ היא פונקציית הפעלה מדרגתית:\n",
|
||||
"$$\n",
|
||||
"f(x) = \\begin{cases}\n",
|
||||
" +1 & x \\geq 0 \\\\\n",
|
||||
|
|
@ -166,7 +166,7 @@
|
|||
" \\end{cases} \\\\\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"עם זאת, מודל לינארי כללי צריך לכלול גם הטיה (bias), כלומר באופן אידיאלי היינו צריכים לחשב $y$ כ-$y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. כדי לפשט את המודל שלנו, ניתן להיפטר מרכיב ההטיה על ידי הוספת מימד נוסף לתכונות הקלט שלנו, שתמיד שווה ל-1:\n"
|
||||
"עם זאת, מודל לינארי כללי צריך לכלול גם הטיה (bias), כלומר באופן אידיאלי עלינו לחשב $y$ כ-$y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. כדי לפשט את המודל שלנו, ניתן להיפטר מרכיב ההטיה על ידי הוספת ממד נוסף לתכונות הקלט שלנו, שתמיד שווה ל-1:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -311,9 +311,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"כפי שאתם יכולים לראות, הדיוק ההתחלתי הוא סביב 50%, אך הוא עולה במהירות לערכים גבוהים קרובים ל-90%.\n",
|
||||
"כפי שאתם יכולים לראות, הדיוק ההתחלתי הוא סביב 50%, אך הוא עולה במהירות לערכים גבוהים הקרובים ל-90%.\n",
|
||||
"\n",
|
||||
"בואו נדמיין איך הקבוצות מופרדות. פונקציית הסיווג שלנו נראית כמו $\\mathbf{w}^Tx$, והיא גדולה מ-0 עבור קבוצה אחת, ונמוכה מ-0 עבור הקבוצה השנייה. לכן, קו ההפרדה בין הקבוצות מוגדר על ידי $\\mathbf{w}^Tx = 0$. מכיוון שיש לנו רק שני ממדים $x_0$ ו-$x_1$, המשוואה עבור הקו תהיה $w_0x_0+w_1x_1+w_2 = 0$ (זכרו שהגדרנו במפורש ממד נוסף $x_2=1$). בואו נשרטט את הקו הזה:\n"
|
||||
"בואו נמחיש כיצד הכיתות מופרדות. פונקציית הסיווג שלנו נראית כמו $\\mathbf{w}^Tx$, והיא גדולה מ-0 עבור כיתה אחת, ונמוכה מ-0 עבור כיתה אחרת. לכן, קו ההפרדה בין הכיתות מוגדר על ידי $\\mathbf{w}^Tx = 0$. מכיוון שיש לנו רק שני ממדים $x_0$ ו-$x_1$, המשוואה עבור הקו תהיה $w_0x_0+w_1x_1+w_2 = 0$ (זכרו שהגדרנו במפורש ממד נוסף $x_2=1$). בואו נשרטט את הקו הזה:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -379,9 +379,9 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"## הערכה על קבוצת הנתונים לבדיקות\n",
|
||||
"## הערכה על קבוצת הנתונים לבחינה\n",
|
||||
"\n",
|
||||
"בהתחלה, שמרנו חלק מהנתונים עבור קבוצת הנתונים לבדיקות. בואו נראה עד כמה המסווג שלנו מדויק על קבוצת נתונים זו. כדי לעשות זאת, אנחנו גם מרחיבים את קבוצת הנתונים לבדיקות עם ממד נוסף, מכפילים במטריצת המשקלים, ומוודאים שהערך שהתקבל הוא באותו סימן כמו התווית (+1 או -1). לאחר מכן, אנחנו מחברים את כל הערכים הבוליאניים ומחלקים באורך הדגימה של הבדיקה, כדי לקבל את רמת הדיוק:\n"
|
||||
"בהתחלה, שמרנו חלק מהנתונים עבור קבוצת הנתונים לבחינה. בואו נראה עד כמה המסווג שלנו מדויק על קבוצת נתונים זו. כדי לעשות זאת, אנו גם מרחיבים את קבוצת הנתונים לבחינה עם ממד נוסף, מכפילים במטריצת המשקלים, ומוודאים שהערך שהתקבל הוא באותו סימן כמו התווית (+1 או -1). לאחר מכן, אנו מחברים את כל הערכים הבוליאניים ומחלקים באורך הדגימה לבחינה, כדי לקבל את רמת הדיוק:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -532,7 +532,7 @@
|
|||
"\n",
|
||||
"כפי שראיתם למעלה, פרספטרון הוא **מסווג ליניארי**. הוא יכול להבחין היטב בין שתי קטגוריות אם הן **ניתנות להפרדה ליניארית**, כלומר ניתן להפריד ביניהן באמצעות קו ישר. אחרת, תהליך האימון של הפרספטרון לא יתכנס.\n",
|
||||
"\n",
|
||||
"דוגמה ברורה לבעיה שלא ניתן לפתור באמצעות פרספטרון היא הבעיה המכונה **XOR**. אנחנו רוצים שהפרספטרון שלנו ילמד את פונקציית ה-XOR הבוליאנית, שלה טבלת אמת כדלקמן:\n",
|
||||
"דוגמה ברורה לבעיה שלא ניתן לפתור באמצעות פרספטרון היא הבעיה המכונה **XOR**. אנחנו רוצים שהפרספטרון שלנו ילמד את פונקציית ה-XOR הבוליאנית, שיש לה את טבלת האמת הבאה:\n",
|
||||
"\n",
|
||||
"| | 0 | 1 |\n",
|
||||
"|---|---|---|\n",
|
||||
|
|
@ -608,19 +608,19 @@
|
|||
"source": [
|
||||
"כפי שניתן לראות מהגרף למעלה, הדיוק לעולם לא עולה מעל 75%, מכיוון שבלתי אפשרי לצייר קו ישר כך שיכסה את כל הדוגמאות האפשריות בצורה נכונה.\n",
|
||||
"\n",
|
||||
"בעיית XOR היא דוגמה קלאסית למגבלות של פרספטון, והיא הוצגה על ידי מרווין מינסקי וסיימור פפרט בשנת 1969 בספרם [Perceptrons](https://en.wikipedia.org/wiki/Perceptrons_(book)). תצפית זו הגבילה את המחקר בתחום הרשתות העצביות למשך כמעט 10 שנים, למרות - וכפי שנראה בחלק הבא של הקורס שלנו - פרספטונים רב-שכבתיים מסוגלים לפתור בעיות כאלה בצורה מושלמת.\n",
|
||||
"בעיית ה-XOR היא דוגמה קלאסית למגבלות של פרספטרון, והיא הוצגה על ידי מרווין מינסקי וסיימור פפרט בשנת 1969 בספרם [Perceptrons](https://en.wikipedia.org/wiki/Perceptrons_(book)). תצפית זו הגבילה את המחקר בתחום הרשתות העצביות למשך כמעט 10 שנים, למרות ש-כפי שנראה בחלק הבא של הקורס שלנו- פרספטרונים רב-שכבתיים מסוגלים לחלוטין לפתור בעיות מסוג זה.\n",
|
||||
"\n",
|
||||
"## דוגמה מורכבת - MNIST\n",
|
||||
"\n",
|
||||
"למרות שפרספטון אינו יכול לפתור את בעיית XOR, הוא יכול לפתור בעיות מורכבות יותר, כמו זיהוי תווים בכתב יד.\n",
|
||||
"למרות שפרספטרון אינו יכול לפתור את בעיית ה-XOR, הוא יכול לפתור בעיות מורכבות בהרבה, כמו זיהוי תווים בכתב יד.\n",
|
||||
"\n",
|
||||
"מערך נתונים שנעשה בו שימוש תדיר בלימוד למידת מכונה נקרא [MNIST](https://en.wikipedia.org/wiki/MNIST_database). הוא נוצר על ידי המכון הלאומי לתקנים וטכנולוגיה (Modified National Institute of Standards and Technology), ומכיל מערך אימון של 60,000 ספרות בכתב יד, שנאספו מכ-250 תלמידים ועובדים של המכון. בנוסף, ישנו מערך בדיקה של 10,000 ספרות, שנאספו מאנשים שונים.\n",
|
||||
"מאגר נתונים שנעשה בו שימוש תכוף בלימוד למידת מכונה נקרא [MNIST](https://en.wikipedia.org/wiki/MNIST_database). הוא נוצר על ידי המכון הלאומי לתקנים וטכנולוגיה (Modified National Institute of Standards and Technology), ומכיל סט אימון של 60,000 ספרות בכתב יד, שנאספו מכ-250 סטודנטים ועובדים של המכון. בנוסף, ישנו סט בדיקה של 10,000 ספרות, שנאספו מאנשים שונים.\n",
|
||||
"\n",
|
||||
"כל הספרות מיוצגות על ידי תמונות בגווני אפור בגודל 28x28 פיקסלים.\n",
|
||||
"\n",
|
||||
"> מערך הנתונים MNIST זמין כתחרות אימון באתר [Kaggle](https://www.kaggle.com/c/digit-recognizer), אתר שמארח תחרויות ואתגרים בתחום למידת מכונה. לאחר שתלמדו כיצד לסווג את הספרות של MNIST, תוכלו להגיש את הפתרון שלכם ל-Kaggle ולראות כיצד הוא מדורג ביחס למשתתפים אחרים.\n",
|
||||
"> מאגר הנתונים MNIST זמין כתחרות אימון באתר [Kaggle](https://www.kaggle.com/c/digit-recognizer), אתר שמארח תחרויות ואתגרים בתחום למידת מכונה. לאחר שתלמדו כיצד לסווג את הספרות של MNIST, תוכלו להגיש את הפתרון שלכם ל-Kaggle ולראות כיצד הוא מדורג ביחס למשתתפים אחרים.\n",
|
||||
"\n",
|
||||
"אנו מתחילים בטעינת מערך הנתונים MNIST:\n"
|
||||
"נתחיל בטעינת מאגר הנתונים MNIST:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -638,7 +638,7 @@
|
|||
"# In this case correct the link to the dataset below as well.\n",
|
||||
"\n",
|
||||
"with gzip.open('../../data/mnist.pkl.gz', 'rb') as mnist_pickle:\n",
|
||||
" MNIST = pickle.load(mnist_pickle)"
|
||||
" MNIST = pickle.load(mnist_pickle, encoding='latin1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -834,9 +834,9 @@
|
|||
"source": [
|
||||
"שימו לב כיצד הדיוק עולה כמעט ל-100% במהירות רבה.\n",
|
||||
"\n",
|
||||
"אנא הזיזו את המחוון למיקום כלשהו לקראת סוף האימון, והתבוננו במטריצת המשקלות המוצגת בצד שמאל. מטריצה זו תאפשר לכם להבין כיצד הפרספטרון עובד בפועל. תוכלו לראות ערכי משקל גבוהים במרכז השדה, אשר מתאימים לפיקסלים שמופיעים בדרך כלל עבור הספרה 1, וערכים שליליים נמוכים בצדדים, שם נמצאים חלקים של הספרה 0. לכן, אם הספרה שמוצגת לפרספטרון היא אכן 1, החלק המרכזי שלה יוכפל בערכים גבוהים, מה שייצר תוצאה חיובית. לעומת זאת, כאשר הפרספטרון מזהה את הספרה 0, הפיקסלים המתאימים יוכפלו במספרים שליליים.\n",
|
||||
"אנא הזיזו את המחוון למיקום כלשהו לקראת סוף האימון, והתבוננו במטריצת המשקלות המוצגת בצד שמאל. מטריצה זו תאפשר לכם להבין כיצד הפרספטרון עובד בפועל. תוכלו לראות ערכי משקל גבוהים במרכז השדה, אשר מתאימים לפיקסלים שמופיעים בדרך כלל עבור הספרה 1, וערכים שליליים נמוכים בצדדים, שם נמצאים חלקים של הספרה 0. לכן, אם הספרה שמוצגת לפרספטרון היא אכן 1, החלק המרכזי שלה יוכפל בערכים גבוהים, מה שייצור תוצאה חיובית. לעומת זאת, כאשר הפרספטרון מזהה את הספרה 0, הפיקסלים המתאימים יוכפלו במספרים שליליים.\n",
|
||||
"\n",
|
||||
"> ייתכן שתשימו לב שאם ניתן לפרספטרון ספרה 1 שמעט הוזזה אופקית, כך שהפיקסלים שלה תופסים את המקום שבו נמצאים החלקים האנכיים של הספרה 0, אנו עשויים לקבל תוצאה שגויה. מכיוון שהאופי של מאגר הנתונים MNIST הוא כזה שכל הספרות ממורכזות וממוקמות כראוי, הפרספטרון מסתמך על כך כדי להבחין בין הספרות.\n",
|
||||
"> ייתכן שתשימו לב שאם ניתן לפרספטרון ספרה 1 שמעט הוזזה אופקית, כך שהפיקסלים שלה תופסים את המקום שבו נמצאים החלקים האנכיים של הספרה 0, אנו עשויים לקבל תוצאה שגויה. מכיוון שטבעו של מאגר הנתונים MNIST הוא כזה שכל הספרות ממורכזות וממוקמות כראוי, הפרספטרון מסתמך על כך כדי להבחין בין הספרות.\n",
|
||||
"\n",
|
||||
"עכשיו בואו ננסה ספרות שונות:\n"
|
||||
]
|
||||
|
|
@ -914,9 +914,9 @@
|
|||
"source": [
|
||||
"## דיון\n",
|
||||
"\n",
|
||||
"מסיבה כלשהי, 2 ו-5 אינם ניתנים להפרדה בקלות. למרות שאנו משיגים דיוק יחסי גבוה (מעל 85%), ניתן לראות בבירור כיצד הפרספטרון מפסיק ללמוד בשלב מסוים.\n",
|
||||
"מסיבה כלשהי, 2 ו-5 אינם ניתנים להפרדה בקלות. למרות שאנו מקבלים דיוק יחסית גבוה (מעל 85%), ניתן לראות בבירור כיצד הפרספטרון מפסיק ללמוד בשלב מסוים.\n",
|
||||
"\n",
|
||||
"כדי להבין מדוע זה קורה, נוכל לנסות להשתמש ב-[ניתוח רכיבים עיקריים](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA). זו טכניקת למידת מכונה המשמשת להקטנת הממדיות של מערך הנתונים הקלטי, באופן שמאפשר להשיג את ההפרדה הטובה ביותר בין הקטגוריות.\n",
|
||||
"כדי להבין מדוע זה קורה, נוכל לנסות להשתמש ב-[ניתוח רכיבים עיקריים](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA). זו טכניקת למידת מכונה המשמשת להורדת הממדיות של מערך הנתונים הקלטי, באופן שמאפשר להשיג את ההפרדה הטובה ביותר בין הקטגוריות.\n",
|
||||
"\n",
|
||||
"במקרה שלנו, תמונת קלט מכילה 784 פיקסלים (תכונות קלט), ואנו רוצים להשתמש ב-PCA כדי לצמצם את מספר הפרמטרים לשניים בלבד, כך שנוכל לשרטט אותם על גרף. שני הפרמטרים הללו יהיו שילוב ליניארי של התכונות המקוריות, ואנו יכולים לראות את התהליך הזה כ\"סיבוב\" של המרחב המקורי בעל 784 הממדים והתבוננות בהקרנה שלו למרחב דו-ממדי, עד שנקבל את התצוגה הטובה ביותר שמפרידה בין הקטגוריות.\n"
|
||||
]
|
||||
|
|
@ -1028,9 +1028,9 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"כפי שניתן לראות, ניתן להפריד בבירור בין 0 ל-1 באמצעות קו ישר. הדבר מעיד על כך שבמרחב המקורי בעל 784 הממדים, הנקודות שמייצגות את הספרות ניתנות להפרדה ליניארית. במקרה של 2 ו-5, לא ניתן למצוא הקרנה טובה שתפריד בבירור בין הספרות, ולכן ישנם מקרים של סיווג שגוי.\n",
|
||||
"כפי שניתן לראות, ניתן להפריד בבירור בין 0 ל-1 באמצעות קו ישר. הדבר מעיד על כך שבמרחב המקורי בעל 784 הממדים, הנקודות שמייצגות את הספרות ניתנות גם הן להפרדה ליניארית. במקרה של 2 ו-5, לא ניתן למצוא הקרנה טובה שתפריד בבירור בין הספרות, ולכן ישנם מקרים של סיווג שגוי.\n",
|
||||
"\n",
|
||||
"> בהמשך הקורס נלמד כיצד ליצור מסווגים לא-ליניאריים באמצעות רשתות נוירונים, וכיצד להתמודד עם בעיות שבהן הספרות אינן מיושרות כראוי. בקרוב מאוד נגיע לדיוק של מעל 99% בסיווג ספרות MNIST, תוך סיווגן לעשר קטגוריות שונות.\n",
|
||||
"> בהמשך הקורס נלמד כיצד ליצור מסווגים לא-ליניאריים באמצעות רשתות נוירונים, וכיצד להתמודד עם בעיות שבהן הספרות אינן מיושרות כראוי. בקרוב מאוד נגיע לדיוק של מעל 99% בסיווג ספרות MNIST, תוך סיווגן ל-10 קטגוריות שונות.\n",
|
||||
"\n",
|
||||
"## תובנות\n",
|
||||
"\n",
|
||||
|
|
@ -1047,14 +1047,14 @@
|
|||
"source": [
|
||||
"## קרדיטים\n",
|
||||
"\n",
|
||||
"מחברת זו היא חלק מ-[AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners), והוכנה על ידי [Dmitry Soshnikov](http://soshnikov.com). היא נוצרה בהשראת סדנת רשתות עצביות במרכז המחקר של מיקרוסופט בקיימברידג'. חלק מהקוד והחומרים האיוריים נלקחו מתוך מצגות של [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) ו-[Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/), וכן מתוך מאגר [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop).\n"
|
||||
"מחברת זו היא חלק מ-[AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners), והוכנה על ידי [Dmitry Soshnikov](http://soshnikov.com). היא נוצרה בהשראת סדנת רשתות עצביות במרכז המחקר של מיקרוסופט בקיימברידג'. חלק מהקוד והחומרים האיורים נלקחו מתוך מצגות של [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) ו-[Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/), וכן מתוך מאגר [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. המסמך המקורי בשפתו המקורית נחשב למקור הסמכותי. למידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי בני אדם. איננו נושאים באחריות לכל אי-הבנה או פרשנות שגויה הנובעת משימוש בתרגום זה. \n"
|
||||
"\n---\n\n**כתב ויתור**: \nמסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1083,8 +1083,8 @@
|
|||
"start_slideshow_at": "selected"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "29c32e04af0f53fc4ecf6d87d5136f37",
|
||||
"translation_date": "2025-08-28T21:14:33+00:00",
|
||||
"original_hash": "914fc55f59efc7e17b8130d4033ac617",
|
||||
"translation_date": "2025-08-28T22:24:31+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb",
|
||||
"language_code": "he"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@
|
|||
"\n",
|
||||
"> Dit notitieboek maakt deel uit van [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners). Bezoek de repository voor de volledige set leermaterialen.\n",
|
||||
"\n",
|
||||
"Zoals we hebben besproken, stelt een perceptron je in staat om een **binaire classificatieprobleem** op te lossen, oftewel om invoervoorbeelden in twee klassen te classificeren - we kunnen ze **positief** en **negatief** noemen.\n",
|
||||
"Zoals we hebben besproken, stelt de perceptron je in staat om een **binaire classificatieprobleem** op te lossen, oftewel om invoer voorbeelden in twee klassen te classificeren - we kunnen ze **positief** en **negatief** noemen.\n",
|
||||
"\n",
|
||||
"Laten we eerst enkele benodigde bibliotheken importeren.\n"
|
||||
"Laten we eerst een paar benodigde bibliotheken importeren.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -47,9 +47,9 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"## Speelprobleem\n",
|
||||
"## Speelgoedprobleem\n",
|
||||
"\n",
|
||||
"Om te beginnen starten we met een eenvoudig probleem, waarbij we twee invoerkenmerken hebben. Bijvoorbeeld, in de geneeskunde willen we mogelijk tumoren classificeren als goedaardig of kwaadaardig, afhankelijk van hun grootte en leeftijd.\n",
|
||||
"Laten we beginnen met een eenvoudig probleem, waarbij we twee invoerkenmerken hebben. Bijvoorbeeld, in de geneeskunde willen we mogelijk tumoren classificeren als goedaardig of kwaadaardig, afhankelijk van hun grootte en leeftijd.\n",
|
||||
"\n",
|
||||
"We zullen een willekeurige classificatiedataset genereren met behulp van de functie `make_classification` uit de SciKit Learn-bibliotheek:\n"
|
||||
]
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Laten we ook de dataset plotten:\n"
|
||||
"Laten we de dataset ook plotten:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
"source": [
|
||||
"## Perceptron\n",
|
||||
"\n",
|
||||
"Aangezien een perceptron een binaire classifier is, zal voor elke invoervector $x$ de output van ons perceptron +1 of -1 zijn, afhankelijk van de klasse. De output wordt berekend met de formule\n",
|
||||
"Aangezien een perceptron een binaire classifier is, zal de output van ons perceptron voor elke invoervector $x$ +1 of -1 zijn, afhankelijk van de klasse. De output wordt berekend met de formule\n",
|
||||
"\n",
|
||||
"$$y(\\mathbf{x}) = f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x})$$\n",
|
||||
"\n",
|
||||
|
|
@ -166,7 +166,7 @@
|
|||
" \\end{cases} \\\\\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Een generiek lineair model zou echter ook een bias moeten hebben, d.w.z. idealiter zouden we $y$ moeten berekenen als $y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. Om ons model te vereenvoudigen, kunnen we deze bias-term elimineren door een extra dimensie toe te voegen aan onze invoerfeatures, die altijd gelijk is aan 1:\n"
|
||||
"Een generiek lineair model zou echter ook een bias moeten hebben, d.w.z. idealiter zouden we $y$ moeten berekenen als $y=f(\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}+\\mathbf{b})$. Om ons model te vereenvoudigen, kunnen we deze bias-term elimineren door een extra dimensie toe te voegen aan onze invoerkenmerken, die altijd gelijk is aan 1:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -206,7 +206,7 @@
|
|||
"source": [
|
||||
"## Trainingsalgoritme\n",
|
||||
"\n",
|
||||
"Om de perceptron te trainen, moeten we gewichten $\\mathbf{w}$ vinden die de fout minimaliseren. De fout wordt gedefinieerd met behulp van **perceptroncriteria**:\n",
|
||||
"Om de perceptron te trainen, moeten we gewichten $\\mathbf{w}$ vinden die de fout minimaliseren. De fout wordt gedefinieerd met behulp van het **perceptroncriterium**:\n",
|
||||
"\n",
|
||||
"$$E(\\mathbf{w}) = -\\sum_{n \\in \\mathcal{M}}\\mathbf{w}^{\\mathrm{T}}\\mathbf{x}_{n}t_{n}$$\n",
|
||||
" \n",
|
||||
|
|
@ -217,9 +217,9 @@
|
|||
"\n",
|
||||
"$$\\mathbf{w}^{\\tau + 1}=\\mathbf{w}^{\\tau} - \\eta \\nabla E(\\mathbf{w}) = \\mathbf{w}^{\\tau} + \\eta\\sum_{n \\in \\mathcal{M}}\\mathbf{x}_{n} t_{n}$$\n",
|
||||
"\n",
|
||||
"waarbij $\\eta$ een **leersnelheid** is, en $\\tau\\in\\mathbb{N}$ - aantal iteraties.\n",
|
||||
"waarbij $\\eta$ een **leersnelheid** is, en $\\tau\\in\\mathbb{N}$ - het aantal iteraties.\n",
|
||||
"\n",
|
||||
"Laten we dit algoritme definiëren in Python:\n"
|
||||
"Laten we dit algoritme in Python definiëren:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -309,9 +309,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Zoals je kunt zien, is de initiële nauwkeurigheid rond de 50%, maar deze neemt snel toe tot hogere waarden dicht bij 90%.\n",
|
||||
"Zoals je kunt zien, is de initiële nauwkeurigheid ongeveer 50%, maar deze neemt snel toe tot hogere waarden dicht bij 90%.\n",
|
||||
"\n",
|
||||
"Laten we visualiseren hoe klassen worden gescheiden. Onze classificatiefunctie ziet eruit als $\\mathbf{w}^Tx$, en deze is groter dan 0 voor de ene klasse, en kleiner dan 0 voor de andere. Dus, de scheidingslijn tussen de klassen wordt gedefinieerd door $\\mathbf{w}^Tx = 0$. Aangezien we slechts twee dimensies hebben, $x_0$ en $x_1$, zou de vergelijking voor de lijn zijn: $w_0x_0+w_1x_1+w_2 = 0$ (onthoud dat we expliciet een extra dimensie hebben gedefinieerd, $x_2=1$). Laten we deze lijn plotten:\n"
|
||||
"Laten we visualiseren hoe klassen worden gescheiden. Onze classificatiefunctie ziet eruit als $\\mathbf{w}^Tx$, en deze is groter dan 0 voor de ene klasse, en kleiner dan 0 voor de andere. Dus, de scheidingslijn tussen de klassen wordt gedefinieerd door $\\mathbf{w}^Tx = 0$. Aangezien we slechts twee dimensies hebben, $x_0$ en $x_1$, zou de vergelijking voor de lijn zijn $w_0x_0+w_1x_1+w_2 = 0$ (onthoud dat we expliciet een extra dimensie hebben gedefinieerd, $x_2=1$). Laten we deze lijn plotten:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -379,7 +379,7 @@
|
|||
"source": [
|
||||
"## Evalueren op Testdataset\n",
|
||||
"\n",
|
||||
"Aan het begin hebben we wat gegevens apart gezet voor de testdataset. Laten we kijken hoe nauwkeurig onze classifier is op deze testdataset. Om dit te doen, breiden we de testdataset uit met een extra dimensie, vermenigvuldigen met de gewichtenmatrix, en zorgen ervoor dat de verkregen waarde hetzelfde teken heeft als het label (+1 of -1). Vervolgens tellen we alle booleaanse waarden bij elkaar op en delen door de lengte van de testset om de nauwkeurigheid te bepalen:\n"
|
||||
"In het begin hebben we wat gegevens apart gezet voor de testdataset. Laten we kijken hoe nauwkeurig onze classifier is op deze testdataset. Om dit te doen, breiden we de testdataset ook uit met een extra dimensie, vermenigvuldigen we met de gewichtenmatrix, en zorgen we ervoor dat de verkregen waarde hetzelfde teken heeft als het label (+1 of -1). Vervolgens tellen we alle booleaanse waarden bij elkaar op en delen we door de lengte van de testset om de nauwkeurigheid te bepalen:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -604,9 +604,9 @@
|
|||
}
|
||||
},
|
||||
"source": [
|
||||
"Zoals je kunt zien in de bovenstaande grafiek, gaat de nauwkeurigheid nooit boven de 75%, omdat het onmogelijk is om een rechte lijn te trekken die alle mogelijke voorbeelden correct classificeert.\n",
|
||||
"Zoals je kunt zien in de bovenstaande grafiek, gaat de nauwkeurigheid nooit boven de 75%, omdat het onmogelijk is om een rechte lijn te tekenen die alle mogelijke voorbeelden correct classificeert.\n",
|
||||
"\n",
|
||||
"Het XOR-probleem is een klassiek voorbeeld van de beperkingen van perceptrons, en dit werd in 1969 aangekaart door Marvin Minsky en Seymour Papert in hun boek [Perceptrons](https://en.wikipedia.org/wiki/Perceptrons_(book)). Deze observatie beperkte het onderzoek op het gebied van neurale netwerken bijna 10 jaar, ondanks dat - en dat zullen we zien in het volgende deel van onze cursus - meerlagige perceptrons dergelijke problemen perfect kunnen oplossen.\n",
|
||||
"Het XOR-probleem is een klassiek voorbeeld van de beperkingen van perceptrons, en het werd in 1969 aangekaart door Marvin Minsky en Seymour Papert in hun boek [Perceptrons](https://en.wikipedia.org/wiki/Perceptrons_(book)). Deze observatie beperkte het onderzoek op het gebied van neurale netwerken bijna 10 jaar, hoewel - en dat zullen we zien in het volgende deel van onze cursus - meerlagige perceptrons perfect in staat zijn om dergelijke problemen op te lossen.\n",
|
||||
"\n",
|
||||
"## Complex voorbeeld - MNIST\n",
|
||||
"\n",
|
||||
|
|
@ -636,7 +636,7 @@
|
|||
"# In this case correct the link to the dataset below as well.\n",
|
||||
"\n",
|
||||
"with gzip.open('../../data/mnist.pkl.gz', 'rb') as mnist_pickle:\n",
|
||||
" MNIST = pickle.load(mnist_pickle)"
|
||||
" MNIST = pickle.load(mnist_pickle, encoding='latin1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -694,7 +694,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Omdat perceptron een binaire classifier is, zullen we ons probleem beperken tot het herkennen van slechts twee cijfers. De onderstaande functie zal positieve en negatieve voorbeeldarrays vullen met twee gegeven cijfers (en zal ook voorbeelden van die cijfers tonen voor duidelijkheid).\n"
|
||||
"Omdat perceptron een binaire classifier is, zullen we ons probleem beperken tot het herkennen van slechts twee cijfers. De onderstaande functie zal positieve en negatieve steekproefarrays vullen met twee gegeven cijfers (en zal ook voorbeelden van die cijfers tonen voor duidelijkheid).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -830,11 +830,11 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let op hoe de nauwkeurigheid bijna 100% bereikt, en dat in een zeer korte tijd.\n",
|
||||
"Let op hoe de nauwkeurigheid bijna 100% bereikt, en dat nog vrij snel.\n",
|
||||
"\n",
|
||||
"Verplaats de schuifregelaar naar een positie richting het einde van de training en observeer de gewichts matrix die aan de linkerkant wordt weergegeven. Deze matrix helpt je te begrijpen hoe de perceptron daadwerkelijk werkt. Je kunt de hoge gewichtswaarden in het midden van het veld zien, die overeenkomen met pixels die typisch aanwezig zijn bij cijfer 1, en lage negatieve waarden aan de zijkanten, waar delen van cijfer 0 zich bevinden. Dus, als het cijfer dat aan de perceptron wordt gepresenteerd daadwerkelijk een 1 is, zal het middelste deel ervan vermenigvuldigd worden met hoge waarden, wat een positief resultaat oplevert. Daarentegen, wanneer de perceptron een 0 observeert, zullen de corresponderende pixels vermenigvuldigd worden met negatieve getallen.\n",
|
||||
"\n",
|
||||
"> Je kunt opmerken dat als we onze perceptron een cijfer 1 geven dat iets horizontaal verschoven is, zodat de pixels zich bevinden op de plek waar verticale delen van een 0 zijn, we mogelijk een incorrect resultaat krijgen. Omdat de aard van onze MNIST dataset zodanig is dat alle cijfers gecentreerd en correct gepositioneerd zijn, vertrouwt de perceptron hierop om onderscheid te maken tussen de cijfers.\n",
|
||||
"> Je kunt opmerken dat als we onze perceptron een cijfer 1 geven dat iets horizontaal verschoven is, zodat de pixels zich bevinden op de plek waar verticale delen van een 0 zijn, we mogelijk een incorrect resultaat krijgen. Omdat de aard van onze MNIST-dataset zodanig is dat alle cijfers gecentreerd en correct gepositioneerd zijn, vertrouwt de perceptron hierop om onderscheid te maken tussen cijfers.\n",
|
||||
"\n",
|
||||
"Laten we nu verschillende cijfers proberen:\n"
|
||||
]
|
||||
|
|
@ -912,11 +912,11 @@
|
|||
"source": [
|
||||
"## Discussie\n",
|
||||
"\n",
|
||||
"Om de een of andere reden zijn 2 en 5 niet zo gemakkelijk te scheiden. Hoewel we een relatief hoge nauwkeurigheid behalen (boven de 85%), kunnen we duidelijk zien dat de perceptron op een bepaald moment stopt met leren.\n",
|
||||
"Om de een of andere reden zijn 2 en 5 niet zo gemakkelijk te scheiden. Hoewel we een relatief hoge nauwkeurigheid behalen (boven de 85%), kunnen we duidelijk zien hoe de perceptron op een bepaald moment stopt met leren.\n",
|
||||
"\n",
|
||||
"Om te begrijpen waarom dit gebeurt, kunnen we proberen [Principale Componenten Analyse](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA) te gebruiken. Dit is een machine learning-techniek die wordt gebruikt om de dimensionaliteit van de invoerdataset te verlagen, op een manier die de beste scheiding tussen klassen oplevert.\n",
|
||||
"Om te begrijpen waarom dit gebeurt, kunnen we proberen [Principale Componentenanalyse](https://en.wikipedia.org/wiki/Principal_component_analysis) (PCA) te gebruiken. Dit is een machine learning-techniek die wordt gebruikt om de dimensionaliteit van de invoerdataset te verlagen, op een manier die de beste scheiding tussen klassen oplevert.\n",
|
||||
"\n",
|
||||
"In ons geval heeft een invoerafbeelding 784 pixels (invoerkenmerken), en we willen PCA gebruiken om het aantal parameters te reduceren tot slechts 2, zodat we ze op een grafiek kunnen plotten. Die twee parameters zouden een lineaire combinatie van de oorspronkelijke kenmerken zijn, en we kunnen deze procedure zien als het \"roteren\" van onze oorspronkelijke 784-dimensionale ruimte en het observeren van de projectie ervan naar onze 2D-ruimte, totdat we de beste weergave krijgen die de klassen scheidt.\n"
|
||||
"In ons geval heeft een invoerafbeelding 784 pixels (invoerkenmerken), en we willen PCA gebruiken om het aantal parameters te reduceren tot slechts 2, zodat we ze op een grafiek kunnen plotten. Die twee parameters zouden een lineaire combinatie van de oorspronkelijke kenmerken zijn, en we kunnen dit proces zien als het \"roteren\" van onze oorspronkelijke 784-dimensionale ruimte en het observeren van de projectie ervan naar onze 2D-ruimte, totdat we het beste zicht krijgen dat de klassen scheidt.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1028,7 +1028,7 @@
|
|||
"source": [
|
||||
"Zoals je kunt zien, kunnen 0 en 1 duidelijk worden gescheiden door een rechte lijn. Dit geeft aan dat in de oorspronkelijke 784-dimensionale ruimte punten die overeenkomen met cijfers ook lineair scheidbaar zijn. In het geval van 2 en 5 kunnen we geen goede projectie vinden die de cijfers duidelijk scheidt, en daarom zijn er enkele gevallen van verkeerde classificatie.\n",
|
||||
"\n",
|
||||
"> Later in deze cursus zullen we leren hoe we niet-lineaire classifiers kunnen maken met behulp van neurale netwerken, en hoe we het probleem kunnen aanpakken van cijfers die niet goed zijn uitgelijnd. Binnenkort zullen we een nauwkeurigheid van meer dan 99% bereiken in de classificatie van MNIST-cijfers, terwijl we ze indelen in 10 verschillende klassen.\n",
|
||||
"> Later in deze cursus zullen we leren hoe we niet-lineaire classifiers kunnen maken met behulp van neurale netwerken, en hoe we het probleem kunnen aanpakken van cijfers die niet goed uitgelijnd zijn. Binnenkort zullen we een nauwkeurigheid van meer dan 99% bereiken in de classificatie van MNIST-cijfers, terwijl we ze indelen in 10 verschillende klassen.\n",
|
||||
"\n",
|
||||
"## Belangrijkste punten\n",
|
||||
"\n",
|
||||
|
|
@ -1052,7 +1052,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor kritieke informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n"
|
||||
"\n---\n\n**Disclaimer**: \nDit document is vertaald met behulp van de AI-vertalingsservice [Co-op Translator](https://github.com/Azure/co-op-translator). Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1081,8 +1081,8 @@
|
|||
"start_slideshow_at": "selected"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "29c32e04af0f53fc4ecf6d87d5136f37",
|
||||
"translation_date": "2025-08-28T21:13:26+00:00",
|
||||
"original_hash": "914fc55f59efc7e17b8130d4033ac617",
|
||||
"translation_date": "2025-08-28T22:23:32+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb",
|
||||
"language_code": "nl"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue