francescomecca.eu/_site/pescewanda/2016/11/10/machine-learning-intro/index.html
2017-09-22 14:07:26 +02:00

1095 lines
22 KiB
HTML

<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>Caught in the Net</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#157878">
<link rel="stylesheet" href="/css/normalize.css">
<!--<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>-->
<link rel="stylesheet" href="/fonts/opensans.css">
<link rel="stylesheet" href="/css/cayman.css">
</head>
<body>
<section class="page-header">
<h1 class="project-name">Caught in the Net</h1>
<h2 class="project-tagline">La rete ti cattura ma libera il pensiero</h2>
<a class="btn" href="/">Home</a>
<a class="btn" href="/about/">About me</a>
<a class="btn" href="/contattami/">Contact me</a>
<a class="btn" href="/archive/">Archive</a>
<a class="btn" href="/feed.xml">RSS</a>
<a class="btn" href="http://francescomecca.eu/git/explore/repos">Personal Git</a>
<a class="btn" href="https://github.com/FraMecca">Github</a>
<a class="btn" href="/curriculum/CV_Mecca_Francesco.pdf">Curriculum</a>
</section>
<section class="main-content">
<div class="post">
<h1 class="post-title">Capire il Machine Learning (parte 1)</h1>
<span class="post-date">10 Nov 2016</span>
<p>Questo è il primo di una serie di post che hanno l&#39;obbiettivo di fornire una breve e generale introduzione al mondo del machine learning e delle intelligenze artificiali più in generale.
Mi auguro che questa breve introduzione al mondo dell&#39;apprendimento automatico sia una sorta di vaccino contro il sensazionalismo mediatico e la disinformazione che negli ultimi anni fanno da contorno al progresso in questo settore.</p>
<h2 id="non-c-39-risultato-senza-algoritmo">Non c&#39;è risultato senza algoritmo</h2>
<p>Nelle scienze informatiche un algoritmo è un insieme di istruzioni che partendo da uno stato iniziale (input) permette di arrivare ad uno stato finale (output) attraverso una serie di step logici.
Ogni algoritmo utilizza una logica propria e specifica per il problema di cui si occupa.
Nel caso del machine learning l&#39;algoritmo non viene progettato in base al tipo di problema bensì vengono utilizzati algoritmi generici adattabili attraverso dei parametri.
L&#39;algoritmo di machine learning analizza i vari parametri e i dati che riceve &quot;in pasto&quot; al fine di raggiungere lo stato di output ottimale.
L&#39;output ottimale è la migliore approssimazione di un risultato teorico che si raggiunge nella fase di &quot;training&quot;.</p>
<h2 id="la-macchina-impara">La macchina impara</h2>
<p>Nella fase di allenamento o di apprendimento, il &quot;training&quot;, si possono adottare due tecniche differenti: apprendimento con supervisione ( <strong>supervised learning</strong> ) e apprendimento senza supervisione ( <strong>unsupervised learning</strong> ).</p>
<h4 id="supervised-learning">Supervised Learning</h4>
<p>Immaginiamo di dover valutare il prezzo di un&#39;automobile usata senza essere esperti in materia.
Noi abbiamo questi dati:</p>
<table><thead>
<tr>
<th>PREZZO ORIGINALE</th>
<th style="text-align: center">Km percorsi</th>
<th style="text-align: center">stato di usura</th>
<th style="text-align: right">PREZZO FINALE</th>
</tr>
</thead><tbody>
<tr>
<td>50 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: center">lieve</td>
<td style="text-align: right">40 000</td>
</tr>
<tr>
<td>30 000</td>
<td style="text-align: center">150 000</td>
<td style="text-align: center">notevole</td>
<td style="text-align: right">8 000</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">80 000</td>
<td style="text-align: center">lieve</td>
<td style="text-align: right">15 000</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: center">notevole</td>
<td style="text-align: right">...</td>
</tr>
</tbody></table>
<p>Dalla tabella possiamo dedurre la caratteristica fondamentale del <strong>supervised learning</strong>: abbiamo due vettori (serie di dati) di input (prezzo originale) e di output (prezzo finale) che hanno una correlazione certa e valida.</p>
<p>Possiamo dedurre intuitivamente quale sarà il prezzo dell&#39;ultima auto se analizziamo i dati precedenti.
Questo è quello che succede nel caso del <strong>supervised learning</strong>.
Un algoritmo di machine learning che utilizza il <strong>supervised learning</strong> estrapolerà la relazione fra i vari dati e in questo modo potrà ottenere un determinato output partendo dai dati di input.
Possiamo capire già da ora che nel caso ci fossero dati che &quot;inquinano&quot; il nostro data set, come ad esempio il colore dell&#39;auto, l&#39;algoritmo non sarà capace di fare un&#39;analisi corretta.</p>
<p>La precisione della soluzione dipende dalla quantità di dati e dall&#39;influenza che questi hanno nella situazione reale.</p>
<h1 id="unsupervised-learning">Unsupervised Learning</h1>
<p>Nel caso di unsupervised learning ci troviamo di fronte agli stessi dati ma senza la possibilità di conoscere il prezzo finale.</p>
<table><thead>
<tr>
<th>PREZZO ORIGINALE</th>
<th style="text-align: center">Km percorsi</th>
<th style="text-align: right">stato di usura</th>
</tr>
</thead><tbody>
<tr>
<td>50 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: right">lieve</td>
</tr>
<tr>
<td>30 000</td>
<td style="text-align: center">150 000</td>
<td style="text-align: right">notevole</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">80 000</td>
<td style="text-align: right">lieve</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: right">notevole</td>
</tr>
</tbody></table>
<p>Non siamo capaci di stabilire il prezzo finale attraverso l&#39;unsupervised learning, ma possiamo stabilire dei pattern fra i vari dati.
Non c&#39;è nessun tipo di feedback (il prezzo finale) che possa aiutarci a capire se il risultato sia giusto ma possiamo analizzare le notevoli relazioni fra i dati.</p>
<h1 id="machine-learning-e-intelligenza">Machine Learning e intelligenza</h1>
<p>Concentriamoci sul <strong>supervised learning</strong>.
Nel caso della vendita dell&#39;automobile, abbiamo un semplice problema con una soluzione lineare di questo tipo:
<em>prezzo finale</em> = <em>prezzo originale</em> + <em>km percorsi</em> + stato di usura</p>
<p>Ovviamente ogni incognita nella nostra equazione influisce diversamente sul prezzo finale e quindi possiamo riscriverla come:
<em>prezzo finale</em> = A *<em>prezzo originale</em> + B *<em>km percorsi</em> + C * stato di usura</p>
<p>Se pensiamo ad un algoritmo possiamo ragionare in questo modo:</p>
<div class="highlight"><pre><code class="language-" data-lang="">funzione: calcola_prezzo_auto:
parametri: prezzo_originale, km_percorsi, stato_usura
variabili: prezzo_finale = 0
prezzo finale = prezzo_originale * 0.804246
prezzo finale = prezzo_finale + km_percorsi * -0.000125
prezzo finale = prezzo_finale + stato_usura * -2500
</code></pre></div>
<p>I valori di quelle costanti, stabilite casualmente nell&#39;esempio, sono chiamate <em>pesi</em> e servono a stimare il prezzo finale.
Una volta stabiliti i pesi, il nostro algoritmo di supervised learning applica questi pesi ai dati originali e ne valuta l&#39;errore:</p>
<table><thead>
<tr>
<th>PREZZO ORIGINALE</th>
<th style="text-align: center">Km percorsi</th>
<th style="text-align: center">stato di usura</th>
<th style="text-align: center">PREZZO FINALE</th>
<th style="text-align: right">PREZZO STIMATO</th>
</tr>
</thead><tbody>
<tr>
<td>50 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: center">lieve</td>
<td style="text-align: center">40 000</td>
<td style="text-align: right">374888</td>
</tr>
<tr>
<td>30 000</td>
<td style="text-align: center">150 000</td>
<td style="text-align: center">notevole</td>
<td style="text-align: center">8 000</td>
<td style="text-align: right">16000</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">80 000</td>
<td style="text-align: center">lieve</td>
<td style="text-align: center">15 000</td>
<td style="text-align: right">13492</td>
</tr>
<tr>
<td>20 000</td>
<td style="text-align: center">120 000</td>
<td style="text-align: center">notevole</td>
<td style="text-align: center">...</td>
<td style="text-align: right">10988</td>
</tr>
</tbody></table>
<p>Una volta valutato l&#39;errore e la distanza dal prezzo finale, l&#39;algoritmo di machine learning modifica i pesi di conseguenza e ripete la procedura fino ad arrivare al risultato che più si avvicina ai dati iniziali.
<img src="/wp-content/uploads/2016/reteneurale1.jpg" alt="rete1">
Ci sono varie funzioni che stimano l&#39;errore e permettono di correggere i pesi o metodi che restringono lo spazio di ricerca fino a convergere alla soluzione, ovvero i pesi cercati.</p>
<h2 id="reti-neurali">Reti Neurali</h2>
<p>Ora, come possiamo immaginare, il prezzo di un&#39;auto ha molti fattori che si aggiungono a quelli elencati nell&#39;esempio.
Non solo, ma molti problemi non hanno una soluzione lineare, ovvero una soluzione che si può semplicemente esprimere attraverso una funzione che aggiunge e moltiplica i valori una sola volta.</p>
<p>Possiamo arricchire l&#39;esempio dell&#39;automobile immaginando di avere più set di pesi e di ripetere il procedimento più volte:</p>
<div class="highlight"><pre><code class="language-" data-lang="">|---------------------------------------------------|
| PREZZO_ORIG * peso A1 -----&gt; |
| KM_PERCORSI * peso B1 -----&gt; |
| STATO_USURA * peso C1 -----&gt; |
| PREZZO FINALE STIMATO 1|
|---------------------------------------------------|
| --------------------------------------------------|
| PREZZO_ORIG * peso A2 -----&gt; |
| KM_PERCORSI * peso B2 -----&gt; |
| STATO_USURA * peso C2 -----&gt; |
| PREZZO FINALE STIMATO 2|
|---------------------------------------------------|
| --------------------------------------------------|
| PREZZO_ORIG * peso A3 -----&gt; |
| KM_PERCORSI * peso B3 -----&gt; |
| STATO_USURA * peso C3 -----&gt; |
| PREZZO FINALE STIMATO 3|
|---------------------------------------------------|
</code></pre></div>
<p>E ora immaginiamo di combinare ogni PREZZO FINALE STIMATO in un&#39;ultimo risultato:</p>
<div class="highlight"><pre><code class="language-" data-lang="">| --------------------------------------------------|
| PREZZO_1 * peso X -----&gt; |
| PREZZO_2 * peso Y -----&gt; |
| PREZZO_3 * peso Z -----&gt; |
| PREZZO FINALE DEF |
|---------------------------------------------------|
</code></pre></div>
<p>Questa é, seppur molto basica, una rete neurale.
Proviamo a visualizzarla in un&#39;immagine dove i box arancioni sono i nodi di input e i rossi sono i nodi &quot;nascosti&quot; e temporanei.</p>
<p><img src="/wp-content/uploads/2016/reteneurale2.jpg" alt="rete2"></p>
<p>In una rete neurale (<em>neural networks</em>) abbiamo:</p>
<ul>
<li><p>i neuroni: la funzione di stima e i set di pesi;</p></li>
<li><p>le catene: i collegamenti fra neuroni che permettono di valutare il prezzo più volte.</p></li>
</ul>
<p>Nel prossimo <a href="/pescewanda/2016/11/11/machine-learning-PARTE2">post</a> cercherò di approfondire il concetto di rete neurale con degli esempi di applicazioni concrete.</p>
</div>
<!--<div class="related">-->
<!--<related-posts />-->
<!--<h2>Related Posts</h2>-->
<!--<ul class="related-posts">-->
<!---->
<!--<li>-->
<!--<h3>-->
<!--<a href="/pescewanda/2017/05/09/vaporwave/">-->
<!--Cyber-utopia and vaporwave-->
<!--<small>09 May 2017</small>-->
<!--</a>-->
<!--</h3>-->
<!--</li>-->
<!---->
<!--<li>-->
<!--<h3>-->
<!--<a href="/pescewanda/2017/05/07/latestage_handbrake/">-->
<!--Late Stage Capitalism meets FOSS-->
<!--<small>07 May 2017</small>-->
<!--</a>-->
<!--</h3>-->
<!--</li>-->
<!---->
<!--<li>-->
<!--<h3>-->
<!--<a href="/pescewanda/2017/03/20/spazio-digitale-rant-facebook__eng/">-->
<!--Some shallow thoughts from my tiny virtual space-->
<!--<small>20 Mar 2017</small>-->
<!--</a>-->
<!--</h3>-->
<!--</li>-->
<!---->
<!--<li>-->
<!--<h3>-->
<!--<a href="/pescewanda/2017/03/07/spazio-digitale-rant-facebook/">-->
<!--Breve riflessione dal mio piccolo mondo virtuale-->
<!--<small>07 Mar 2017</small>-->
<!--</a>-->
<!--</h3>-->
<!--</li>-->
<!---->
<!--<li>-->
<!--<h3>-->
<!--<a href="/pescewanda/2016/11/15/machine-learning-PARTE3/">-->
<!--Capire il Machine Learning (parte 3)-->
<!--<small>15 Nov 2016</small>-->
<!--</a>-->
<!--</h3>-->
<!--</li>-->
<!---->
<!--</ul>-->
<!--</div>-->
<h4>Similar Posts</h4>
<ul>
<li class="relatedPost">
<a href="/pescewanda/2016/11/15/machine-learning-PARTE3/">Capire il Machine Learning (parte 3)
</a>
</li>
<li class="relatedPost">
<a href="/pescewanda/2016/11/11/machine-learning-PARTE2/">Capire il Machine Learning (parte 2)
</a>
</li>
<li class="relatedPost">
<a href="/pescewanda/2016/07/05/arduino_keyboard/">Arduino Uno as HID keyboard
</a>
</li>
</ul>
<footer class="site-footer">
<!--<span class="site-footer-owner"><a href="http://francescomecca.eu">Caught in the Net</a> is maintained by <a href="contattami">Francesco Mecca</a>.</span>-->
<span> CC BY-SA 4.0 International.</br> </span>
<span class="site-footer-credits"><a href="https://jekyllrb.com">Jekyll</a>, <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a>.</span>
</footer>
</section>
</body>
</html>