Matematica. La regina delle scienze
 

Ottimizzazione

Kiuhnm Mnhuik 10 Mag 2017 13:40
Salve a tutti,

c'è per caso qualche studente o esperto di ottimizzazione convessa (e non) su
questo ng?
radicale.001@gmail.com 10 Mag 2017 22:28
Il giorno mercoledì 10 maggio 2017 13:40:17 UTC+2, Kiuhnm Mnhuik ha scritto:
> Salve a tutti,
>
> c'è per caso qualche studente o esperto di ottimizzazione convessa (e non) su
questo ng?

come stai ? Va meglio ? Lo spero tanto, fammi sapere.
fmassei@gmail.com 10 Mag 2017 22:45
On Wednesday, May 10, 2017 at 7:40:17 AM UTC-4, Kiuhnm Mnhuik wrote:
> Salve a tutti,
>
> c'è per caso qualche studente o esperto di ottimizzazione convessa
> (e non) su questo ng?
>

Io so solo quelle due cosette che si studiano in machine learning...
Prova a chiedere, ma probabilmente già ne sai più tu di me :)

Ciao!
Kiuhnm Mnhuik 11 Mag 2017 01:12
On Wednesday, May 10, 2017 at 10:28:16 PM UTC+2, radica...@gmail.com wrote:
> Il giorno mercoledì 10 maggio 2017 13:40:17 UTC+2, Kiuhnm Mnhuik ha scritto:
>> Salve a tutti,
>>
>> c'è per caso qualche studente o esperto di ottimizzazione convessa (e non)
su questo ng?
>
> come stai ? Va meglio ? Lo spero tanto, fammi sapere.

Ciao, sto un po' meglio, ma non sono ancora guarito. Grazie per
l'interessamento!
Kiuhnm Mnhuik 11 Mag 2017 01:46
On Wednesday, May 10, 2017 at 10:45:05 PM UTC+2, fma...@gmail.com wrote:
> Io so solo quelle due cosette che si studiano in machine learning...
> Prova a chiedere, ma probabilmente già ne sai più tu di me :)
>
> Ciao!

Ciao, era più che altro per aver qualcuno con cui parlare di queste cose. Così
è meno noioso, anche se la materia è interessante.
Pensa che adesso sui siti di QA tipo stackexchange installano script per
togliere automaticamente i saluti perché dicono che fanno perdere tempo a chi
deve rispondere. Questo per dirti il livello di rapporto sociale che si instaura
su questi siti...
Non esistono più i forum/ng come questo. Appena apri bocca ti trovi -10 perché
non hai rispettato chissà quale regola. Anche reddit non è un granché come
frequentazioni.

Ho deciso di studiare ottimizzazione convessa per 3-4 mesi. Il primo mese ho
studiato il libro di Boyd (http://stanford.edu/~boyd/cvxbook/) corrispondente al
corso EE364A e adesso sto per iniziare il secondo corso (EE364B). Concluderò
con http://www.cs.cmu.edu/~suvrit/teach/index.html
Boyd è piuttosto divertente così mi sto guardando anche le lezioni registrate.
marcofuics 11 Mag 2017 09:09
Scusa l'ignoranza

Mi faresti un esempio pratico di ottimizzazione convessa?
Kiuhnm Mnhuik 11 Mag 2017 13:21
On Thursday, May 11, 2017 at 10:06:21 AM UTC+2, Di passaggio a nord ovest wrote:
>>Ciao, era più che altro per aver qualcuno con cui parlare di queste cose.
>
> Io ti possi dire che il mio prof di *****isi 1 e 2 era proprio ricercatore
> in questo
> settore (*****isi convessa negli spazi di Banach, ecc).

Penso che in pratica, in ML/AI, ci si limiti agli spazi di dimensione finita, ma
vedrò più avanti. Magari mi sto illudendo :)

> La cosa si è ripercossa un po' nel nostro corso, perché, col senno di poi, i

> suoi
> "pre-teorema" di Rolle[1] ecc. ho capito che erano generalizzazioni che non
> richiedevano
> la differenziabilità e nascevano da quel settore. (credo da an convessa, ad
> an non-convessa,
> e quindi non-smooth *****ysis).

Sì, la differenziabilità non è richiesta, ma aiuta parecchio in pratica.
Un metodo molto semplice è quello di usare funzioni surrogate, cioè
approssimazioni differenziabili della funzione obiettivo originale.
Per es. nel machine learning spesso si vuole minimizzare la funzione, non
smooth, che conta il numero di classificazioni errate, ma in pratica ci si
accontenta di minimizzare la funzione che calcola la distanza tra le
classificazioni ottenute e quelle corrette, che è invece smooth.

> Poi pare che nelle sue dispense si citassero i "prossimali", ecc.

Sì, li vedrò a breve. Forse hai sentito anche parlare di sotto gradienti
(subgradient).
Kiuhnm Mnhuik 11 Mag 2017 13:57
On Thursday, May 11, 2017 at 9:09:35 AM UTC+2, marcofuics wrote:
> Scusa l'ignoranza
>
> Mi faresti un esempio pratico di ottimizzazione convessa?

Dati dei punti rossi e blu, trovare la retta che separi i punti blu da quelli
rossi, massimizzando il margine, cioè la minima distanza dei punti dalla retta.
fmassei@gmail.com 11 Mag 2017 16:03
On Wednesday, May 10, 2017 at 7:46:14 PM UTC-4, Kiuhnm Mnhuik wrote:
> On Wednesday, May 10, 2017 at 10:45:05 PM UTC+2, fma...@gmail.com wrote:
>> Io so solo quelle due cosette che si studiano in machine learning...
>> Prova a chiedere, ma probabilmente già ne sai più tu di me :)
>>
>> Ciao!
>
> Ciao, era più che altro per aver qualcuno con cui parlare di queste cose.
> Così è meno noioso, anche se la materia è interessante.
> Pensa che adesso sui siti di QA tipo stackexchange installano script per
> togliere automaticamente i saluti perché dicono che fanno perdere tempo a
> chi deve rispondere. Questo per dirti il livello di rapporto sociale che
> si instaura su questi siti...
> Non esistono più i forum/ng come questo. Appena apri bocca ti trovi -10
> perché non hai rispettato chissà quale regola. Anche reddit non è un
> granché come frequentazioni.
>

Verissimo. Purtroppo cose come stackexchange non sono pensate per fare una
discussione, ma come dei veri e propri siti di Q/A.

> Ho deciso di studiare ottimizzazione convessa per 3-4 mesi. Il primo mese
> ho studiato il libro di Boyd (http://stanford.edu/~boyd/cvxbook/)
> corrispondente al corso EE364A e adesso sto per iniziare il secondo corso
> (EE364B). Concluderò con http://www.cs.cmu.edu/~suvrit/teach/index.html
> Boyd è piuttosto divertente così mi sto guardando anche le lezioni
> registrate.

Il Boyd non l'ho letto, ma ho visto ora l'indice e fortunatamente fino a lì
ancora ci arrivo :)

Conoscendoti, tu sarai molto più interessato alla parte teorica matematica, e
conoscendomi già t'immaginerai che a me più che altro interessa la parte
algoritmica e di applicazione, ma a fare due chiacchiere qualcosa di
interessante sicuramente viene fuori!

Ciao!
fmassei@gmail.com 11 Mag 2017 16:11
On Thursday, May 11, 2017 at 3:09:35 AM UTC-4, marcofuics wrote:
> Scusa l'ignoranza
>
> Mi faresti un esempio pratico di ottimizzazione convessa?
>

Nella pratica, qualsiasi problema di ottimizzazione è di ottimizzazione
convessa: se la funzione obiettivo non è convessa son guai seri, e se lo è
è quasi immediato risolvere. Quindi si cerca sempre un problema
equivalente, simile o approssimato con tali caratteristiche.

Ciao!
fmassei@gmail.com 11 Mag 2017 16:31
On Thursday, May 11, 2017 at 7:57:01 AM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 9:09:35 AM UTC+2, marcofuics wrote:
>> Scusa l'ignoranza
>>
>> Mi faresti un esempio pratico di ottimizzazione convessa?
>
> Dati dei punti rossi e blu, trovare la retta che separi i punti blu da
> quelli rossi, massimizzando il margine, cioè la minima distanza dei punti
> dalla retta.
>

Ti stai già vedendo le SVM, eh? :D

Di questo per esempio ringrazio il cielo, che oggi esistono delle liberie
per fare questo tipo di lavori: per capire come si arrivava alla soluzione
del problema del margine ottimo (che è simile al margine massimo che hai
detto te) la prima volta ci misi due giorni :(

Ciao!
Kiuhnm Mnhuik 11 Mag 2017 16:34
On Thursday, May 11, 2017 at 4:11:23 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 3:09:35 AM UTC-4, marcofuics wrote:
>> Scusa l'ignoranza
>>
>> Mi faresti un esempio pratico di ottimizzazione convessa?
>>
>
> Nella pratica, qualsiasi problema di ottimizzazione è di ottimizzazione
> convessa: se la funzione obiettivo non è convessa son guai seri, e se lo è
> è quasi immediato risolvere. Quindi si cerca sempre un problema
> equivalente, simile o approssimato con tali caratteristiche.

Purtroppo è pieno di problemi non-convessi. Pensa solo all'addestramento di
reti neurali o all'inferenza in modelli probabilistici con variabili latenti.
Vedi https://www.youtube.com/watch?v=eXVAyvKywJ0
fmassei@gmail.com 11 Mag 2017 16:42
On Thursday, May 11, 2017 at 10:34:52 AM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 4:11:23 PM UTC+2, fma...@gmail.com wrote:
>> On Thursday, May 11, 2017 at 3:09:35 AM UTC-4, marcofuics wrote:
>>> Scusa l'ignoranza
>>>
>>> Mi faresti un esempio pratico di ottimizzazione convessa?
>>>
>>
>> Nella pratica, qualsiasi problema di ottimizzazione è di ottimizzazione
>> convessa: se la funzione obiettivo non è convessa son guai seri, e se lo è
>> è quasi immediato risolvere. Quindi si cerca sempre un problema
>> equivalente, simile o approssimato con tali caratteristiche.
>
> Purtroppo è pieno di problemi non-convessi. Pensa solo all'addestramento
> di reti neurali o all'inferenza in modelli probabilistici con variabili
> latenti.
> Vedi https://www.youtube.com/watch?v=eXVAyvKywJ0
>

Sì, giustamente in teoria se hai una variabile latente la funzione non può
essere convessa. E sempre in teoria più sono le dimensioni più hai
minimi e massimi locali.
Raramente però ci si mette a fare *****isi non-convessa se non in teoria,
visto che spesso è semplice trovare un modo d'aggirare il problema o
arrivare ad una soluzione approssimata accettabile; almeno, da quel che
ho visto io.

Ciao!
Kiuhnm Mnhuik 11 Mag 2017 16:53
On Thursday, May 11, 2017 at 4:31:23 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 7:57:01 AM UTC-4, Kiuhnm Mnhuik wrote:
>> On Thursday, May 11, 2017 at 9:09:35 AM UTC+2, marcofuics wrote:
>>> Scusa l'ignoranza
>>>
>>> Mi faresti un esempio pratico di ottimizzazione convessa?
>>
>> Dati dei punti rossi e blu, trovare la retta che separi i punti blu da
>> quelli rossi, massimizzando il margine, cioè la minima distanza dei punti
>> dalla retta.
>>
>
> Ti stai già vedendo le SVM, eh? :D

Le ho studiate qualche anno fa, ma mi sto concentrando sulle reti neurali e la
programmazione probabilistica.

> Di questo per esempio ringrazio il cielo, che oggi esistono delle liberie
> per fare questo tipo di lavori: per capire come si arrivava alla soluzione
> del problema del margine ottimo (che è simile al margine massimo che hai
> detto te) la prima volta ci misi due giorni :(

Esatto, il mio esempio è un precursore delle SVM. Se rilassi il vincolo di
separazione e riscrivi il tutto usando solo prodotti interni, hai le SVM e poi
puoi usare tutti i kernel che vuoi, come ben sai.
fmassei@gmail.com 11 Mag 2017 17:11
On Thursday, May 11, 2017 at 10:53:10 AM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 4:31:23 PM UTC+2, fma...@gmail.com wrote:
>> Ti stai già vedendo le SVM, eh? :D
>
> Le ho studiate qualche anno fa, ma mi sto concentrando sulle reti neurali
> e la programmazione probabilistica.
>

Interessante! Cose come reti di Bayes/Markov? O convolution networks?

Parlando di reti, proprio due mesi fa ho scritto un'implementazione di una
MLP classica (2-layer, BP, come quarant'anni fa :) perché un amico le stava
studiando e volevo vedere se ancora ero capace di scriverne una da zero) ma
usando le BLAS, vettorizzando le operazioni di AL: una scheggia!
http://www.massei.net/projects/mnist_mlp.html
(Non guardare il resto del sito che è in costruzione - ormai da mesi)

Ciao!
Kiuhnm Mnhuik 11 Mag 2017 17:15
On Thursday, May 11, 2017 at 4:42:35 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 10:34:52 AM UTC-4, Kiuhnm Mnhuik wrote:
>> On Thursday, May 11, 2017 at 4:11:23 PM UTC+2, fma...@gmail.com wrote:
>>> On Thursday, May 11, 2017 at 3:09:35 AM UTC-4, marcofuics wrote:
>>>> Scusa l'ignoranza
>>>>
>>>> Mi faresti un esempio pratico di ottimizzazione convessa?
>>>>
>>>
>>> Nella pratica, qualsiasi problema di ottimizzazione è di ottimizzazione
>>> convessa: se la funzione obiettivo non è convessa son guai seri, e se lo
è
>>> è quasi immediato risolvere. Quindi si cerca sempre un problema
>>> equivalente, simile o approssimato con tali caratteristiche.
>>
>> Purtroppo è pieno di problemi non-convessi. Pensa solo all'addestramento
>> di reti neurali o all'inferenza in modelli probabilistici con variabili
>> latenti.
>> Vedi https://www.youtube.com/watch?v=eXVAyvKywJ0
>>
>
> Sì, giustamente in teoria se hai una variabile latente la funzione non può
> essere convessa. E sempre in teoria più sono le dimensioni più hai
> minimi e massimi locali.
> Raramente però ci si mette a fare *****isi non-convessa se non in teoria,
> visto che spesso è semplice trovare un modo d'aggirare il problema o
> arrivare ad una soluzione approssimata accettabile; almeno, da quel che
> ho visto io.

L'industria usa quello che funziona e l'*****isi non-convessa è appena agli
inizi e quindi relegata alla ricerca. Per ora non ho visto grandi applicazioni
pratiche, come dici tu. Staremo a vedere.
Oltre all'ottimizzazione sto studiando anche reinforcement learning. La gente
comune pensa che i terminator siano dietro l'angolo, ma più stu***** e più
vedo quanto siamo indietro :(
fmassei@gmail.com 11 Mag 2017 17:42
On Thursday, May 11, 2017 at 11:15:24 AM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 4:42:35 PM UTC+2, fma...@gmail.com wrote:
>> Sì, giustamente in teoria se hai una variabile latente la funzione non può
>> essere convessa. E sempre in teoria più sono le dimensioni più hai
>> minimi e massimi locali.
>> Raramente però ci si mette a fare *****isi non-convessa se non in teoria,
>> visto che spesso è semplice trovare un modo d'aggirare il problema o
>> arrivare ad una soluzione approssimata accettabile; almeno, da quel che
>> ho visto io.
>
> L'industria usa quello che funziona e l'*****isi non-convessa è appena
> agli inizi e quindi relegata alla ricerca. Per ora non ho visto grandi
> applicazioni pratiche, come dici tu. Staremo a vedere.
>

Sì, probabilmente è per quello. Oltretutto spesso la ricerca in questi
campi fa uso di matematica "pesante" che persone come me non capiscono
proprio :) Quindi, a meno di non avere un beneficio sostanziale, immagino
si preferisca usare metodi "vecchi" che non solo sono provati sul campo,
ma si capiscono e si possono modificare a piacimento senza andare a
cercare un professore universitario ;)

> Oltre all'ottimizzazione sto studiando anche reinforcement learning. La
> gente comune pensa che i terminator siano dietro l'angolo, ma più stu*****
> e più vedo quanto siamo indietro :(
>

Già :(
Ma vabbè, la "gente comune" ha le idee confuse su un sacco di cose :)

Ciao!
Kiuhnm Mnhuik 11 Mag 2017 17:48
On Thursday, May 11, 2017 at 5:11:59 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 10:53:10 AM UTC-4, Kiuhnm Mnhuik wrote:
>> On Thursday, May 11, 2017 at 4:31:23 PM UTC+2, fma...@gmail.com wrote:
>>> Ti stai già vedendo le SVM, eh? :D
>>
>> Le ho studiate qualche anno fa, ma mi sto concentrando sulle reti neurali
>> e la programmazione probabilistica.
>>
>
> Interessante! Cose come reti di Bayes/Markov? O convolution networks?

Ho fatto vari esperimenti con MLPs, convnets, ecc... Adesso non si parla d'altro
che di GAN, cioè generative adversarial networks. Non so se le conosci.
Praticamente due reti neurali gareggiano l'una contro l'altra. Per es. la prima
cerca di generare delle foto indistinguibili da quelle d'addestramento, e la
seconda rete cerca di distinguere le immagini generate da quelle vere.
Alla fine ottieni una rete in grado di generare, per es., immagini di volti
piuttosto realistici di persone che non esistono.
C'è un intero mondo di reti neurali per ogni genere di cose.

A me interessa particolarmente il deep reinforcement learning e il mondo
dell'AI.

M'interessano anche le reti di Markov e Bayes. Il deep learning e i modelli
probabilistici stanno iniziando a fondersi portando alla nascita del Bayesian
Deep Learning. Devo ancora studiare questa roba, ma è molto affascinante.

> Parlando di reti, proprio due mesi fa ho scritto un'implementazione di una
> MLP classica (2-layer, BP, come quarant'anni fa :) perché un amico le stava
> studiando e volevo vedere se ancora ero capace di scriverne una da zero) ma
> usando le BLAS, vettorizzando le operazioni di AL: una scheggia!
> http://www.massei.net/projects/mnist_mlp.html
> (Non guardare il resto del sito che è in costruzione - ormai da mesi)

Bello e molto istruttivo! Chiunque dovrebbe fare un simile esercizio prima di
passare a usare librerie tipo Theano o Tensorflow. Ormai uso esclusivamente
Python con le suddette librerie.

Non tocco più il C++ da una vita ed è cambiato così tanto che dovrei
ristudiarlo da capo. Sono propenso a passare invece a Rust. Lo conosci?
E' interessante perché pur non usando alcun garbage collector è in grado di
prevenire errori legati a memoria e sincronizzazione.
Kiuhnm Mnhuik 11 Mag 2017 18:00
On Thursday, May 11, 2017 at 5:42:16 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 11:15:24 AM UTC-4, Kiuhnm Mnhuik wrote:
>> On Thursday, May 11, 2017 at 4:42:35 PM UTC+2, fma...@gmail.com wrote:
>>> Sì, giustamente in teoria se hai una variabile latente la funzione non
può
>>> essere convessa. E sempre in teoria più sono le dimensioni più hai
>>> minimi e massimi locali.
>>> Raramente però ci si mette a fare *****isi non-convessa se non in teoria,
>>> visto che spesso è semplice trovare un modo d'aggirare il problema o
>>> arrivare ad una soluzione approssimata accettabile; almeno, da quel che
>>> ho visto io.
>>
>> L'industria usa quello che funziona e l'*****isi non-convessa è appena
>> agli inizi e quindi relegata alla ricerca. Per ora non ho visto grandi
>> applicazioni pratiche, come dici tu. Staremo a vedere.
>>
>
> Sì, probabilmente è per quello. Oltretutto spesso la ricerca in questi
> campi fa uso di matematica "pesante" che persone come me non capiscono
> proprio :) Quindi, a meno di non avere un beneficio sostanziale, immagino
> si preferisca usare metodi "vecchi" che non solo sono provati sul campo,
> ma si capiscono e si possono modificare a piacimento senza andare a
> cercare un professore universitario ;)

Sei/siamo in buona compagnia :)
Comunque a volte si leggono paper di metodi complicatissimi che usano matematica
super avanzata che alla fine funzionano peggio di semplici metodi basati sul
buon senso e l'intuito.
fmassei@gmail.com 11 Mag 2017 18:24
On Thursday, May 11, 2017 at 11:48:18 AM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 5:11:59 PM UTC+2, fma...@gmail.com wrote:
>> Interessante! Cose come reti di Bayes/Markov? O convolution networks?
>
> Ho fatto vari esperimenti con MLPs, convnets, ecc... Adesso non si parla
> d'altro che di GAN, cioè generative adversarial networks. Non so se le
> conosci. Praticamente due reti neurali gareggiano l'una contro l'altra.
> Per es. la prima cerca di generare delle foto indistinguibili da quelle
> d'addestramento, e la seconda rete cerca di distinguere le immagini
> generate da quelle vere.
> Alla fine ottieni una rete in grado di generare, per es., immagini di
> volti piuttosto realistici di persone che non esistono.
> C'è un intero mondo di reti neurali per ogni genere di cose.
>

Sì, ho letto qualcosa. Sono anche famosi tra la su citata "gente comune"
gli "output" di queste reti, molti dei quali ad occhio sembrano venire
da un incubo sotto allucinogeni :D

Del resto c'è stata una "rinascita" della ricerca sulle reti neurali da
una decina d'anni, e le hanno "mischiate" praticamente con qualsiasi altro
algoritmo di DL conosciuto :)
Qualche anno fa, quando avevo più tempo libero, m'ero interessato alle
reti a topologia variabile generate tramite algoritmi genetici. Roba
interessante che è stata famosa per un po', adesso sparita.
Oggi come oggi ogni tanto mi leggo un paper, ma aspetto sempre di vedere
i risultati prima di buttarmici a capo fitto.

> A me interessa particolarmente il deep reinforcement learning e il mondo
> dell'AI.
>
> M'interessano anche le reti di Markov e Bayes. Il deep learning e i modelli
> probabilistici stanno iniziando a fondersi portando alla nascita del
> Bayesian Deep Learning. Devo ancora studiare questa roba, ma è molto
> affascinante.
>

Decisamente, anche secondo me è un campo meraviglioso :)

>> Parlando di reti, proprio due mesi fa ho scritto un'implementazione di
>> una MLP classica (2-layer, BP, come quarant'anni fa :) perché un amico
>> le stava studiando e volevo vedere se ancora ero capace di scriverne una
>> da zero) ma usando le BLAS, vettorizzando le operazioni di AL: una
>> scheggia!
>> http://www.massei.net/projects/mnist_mlp.html
>> (Non guardare il resto del sito che è in costruzione - ormai da mesi)
>
> Bello e molto istruttivo! Chiunque dovrebbe fare un simile esercizio prima
> di passare a usare librerie tipo Theano o Tensorflow. Ormai uso
> esclusivamente Python con le suddette librerie.
>

Ah, ma anch'io. Non ha senso fare questo genere di cose a mano, ci vuole
troppo tempo ed è troppo facile sbagliarsi.

Ogni tanto però capita...
Il mese scorso, ad esempio, un collega di mia moglie doveva *****izzare una
serie di video presi al microscopio per quantificare come/dove certi
"cosetti" si spostavano in una cellula (sorry ma io di biologia non capisco
un tubo!). Gli ho fatto in tre ore un programmino in Java che faceva
K-mean clustering su ogni frame e poi prendeva le traiettorie dei centroidi.
Java non lo conosco, e se lo dovevo fare con una libreria, dopo due ore
ancora stavo leggendo la documentazione :D

> Non tocco più il C++ da una vita ed è cambiato così tanto che dovrei
> ristudiarlo da capo. Sono propenso a passare invece a Rust. Lo conosci?
> E' interessante perché pur non usando alcun garbage collector è in grado
> di prevenire errori legati a memoria e sincronizzazione.
>

Di Rust ho letto la documentazione e l'ho anche provato per un po', ma non
lavoro sul campo dove quel linguaggio da il massimo (programmazione di
sistema), quindi non l'ho iniziato ad usare costantemente.
Poi, personalmente, ho lavorato così tanti anni in C e in C++ che non mi
da fasti***** l'idea di dover gestire memoria, threads e sincronizzazioni a
mano, visto che mi viene naturale. Sono sicuro che invece per tutti coloro
che non c'hanno passato decenni sia un incubo. Immagino dipenda dal
background che uno ha.
Rimango dell'idea che ogni linguaggio ha un suo campo naturale
d'applicazione, e per ML, python e C++ vanno alla grande, non vedo perché
cambiare :)

Ciao!
fmassei@gmail.com 11 Mag 2017 19:33
On Thursday, May 11, 2017 at 12:00:34 PM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 5:42:16 PM UTC+2, fma...@gmail.com wrote:
>> Sì, probabilmente è per quello. Oltretutto spesso la ricerca in questi
>> campi fa uso di matematica "pesante" che persone come me non capiscono
>> proprio :) Quindi, a meno di non avere un beneficio sostanziale, immagino
>> si preferisca usare metodi "vecchi" che non solo sono provati sul campo,
>> ma si capiscono e si possono modificare a piacimento senza andare a
>> cercare un professore universitario ;)
>
> Sei/siamo in buona compagnia :)

E se non ci capisci te, immagina che ci posso capire io! :D

> Comunque a volte si leggono paper di metodi complicatissimi che usano
> matematica super avanzata che alla fine funzionano peggio di semplici
> metodi basati sul buon senso e l'intuito.

Già. Ma questo è un aspetto della matematica ricorrente: sappiamo che una
cosa funziona ma non perché, o quali siano i limiti, o se sia generalizzabile;
dopo anni si trova una dimostrazione che risolve la questione teorica.
E' un lavoro importante e che bisogna fare, ma sì, l'industria non si cura
molto di questi dettagli :)

Vale anche l'opposto; è famosa una frase di Knuth su una dimostrazione di
un algoritmo di non ricordo cosa (code con priorità, penso):
"I have only proved it correct, not tried it."
:D

Ciao!
Kiuhnm Mnhuik 12 Mag 2017 01:09
On Thursday, May 11, 2017 at 6:24:49 PM UTC+2, fma...@gmail.com wrote:
> Qualche anno fa, quando avevo più tempo libero, m'ero interessato alle
> reti a topologia variabile generate tramite algoritmi genetici. Roba
> interessante che è stata famosa per un po', adesso sparita.

A me gli algoritmi genetici o evolutivi in generale non sono mai piaciuti
perché alla fine sono poco più di forza bruta. Parere non condiviso da tutti,
ma a me hanno sempre dato questa impressione.
Oggi si tende a "differenzializzare" tutto. Non so se hai sentito, ma deep mind
ha ideato i computer differenziali che sono praticamente delle reti neurali
dotate di memoria e turing complete. So che sono un'estensione delle RNN e delle
LSTM, ma non me ne sono ancora interessato.
Troppa troppa roba... e poi per addestrarle devi avere dei cluster con almeno
200 GPU.

> Il mese scorso, ad esempio, un collega di mia moglie doveva *****izzare una
> serie di video presi al microscopio per quantificare come/dove certi
> "cosetti" si spostavano in una cellula (sorry ma io di biologia non capisco
> un tubo!). Gli ho fatto in tre ore un programmino in Java che faceva
> K-mean clustering su ogni frame e poi prendeva le traiettorie dei centroidi.
> Java non lo conosco, e se lo dovevo fare con una libreria, dopo due ore
> ancora stavo leggendo la documentazione :D

Neanch'io conosco Java. Venendo dal C e C++ non mi è mai piaciuto! Ho una sorta
di rifiuto.

> Di Rust ho letto la documentazione e l'ho anche provato per un po', ma non
> lavoro sul campo dove quel linguaggio da il massimo (programmazione di
> sistema), quindi non l'ho iniziato ad usare costantemente.
> Poi, personalmente, ho lavorato così tanti anni in C e in C++ che non mi
> da fasti***** l'idea di dover gestire memoria, threads e sincronizzazioni a
> mano, visto che mi viene naturale. Sono sicuro che invece per tutti coloro
> che non c'hanno passato decenni sia un incubo. Immagino dipenda dal
> background che uno ha.

Anch'io ho lavorato in C++ per molti anni, però non ne sento la mancanza
sinceramente. A me piace provare sempre nuovi linguaggi. Mi pare che Rust sia di
livello più alto del C++. Sbaglio? Devo ancora leggere la documentazione.
Vorrei qualcosa veloce quanto il C++, ma più espressivo.
Ci sarebbe il linguaggio D, ma non ha mai preso piede che io sappia.
Kiuhnm Mnhuik 12 Mag 2017 01:34
On Friday, May 12, 2017 at 1:09:53 AM UTC+2, Di passaggio a nord ovest wrote:
> Fra i libri che so esre molto usati ci sono queli di Rockafellar (*****isi
> convesa e seguenti), Clarke (*****isi nonsmooth)
> e soprattutto Aubin.
> Afaik Aubin si spinge negli anni 90 fino alla set-valued *****ysis, (poi
> mutational *****ysis) e usa questi metodi per fare un modello
> delle neural-networks. Ma credo resti perlopiù un lavoro accademico. Non
> credo faccia parte del know-how mainstream.
> Ma potrei sbagliarmi.

Conosco solo il Rockafellar. Probabilmente gli altri sono troppo sul teorico per
chi fa machine learning come me. E poi ogni comunità ha i suoi nomi di
riferimento. Noi abbiamo Bertsekas, Nocedal, Wright, Nesterov, ecc...
Comunque darò un'occhiata agli autori che hai citato!
fmassei@gmail.com 12 Mag 2017 20:16
On Thursday, May 11, 2017 at 7:09:41 PM UTC-4, Kiuhnm Mnhuik wrote:
> On Thursday, May 11, 2017 at 6:24:49 PM UTC+2, fma...@gmail.com wrote:
>> Qualche anno fa, quando avevo più tempo libero, m'ero interessato alle
>> reti a topologia variabile generate tramite algoritmi genetici. Roba
>> interessante che è stata famosa per un po', adesso sparita.
>
> A me gli algoritmi genetici o evolutivi in generale non sono mai piaciuti
> perché alla fine sono poco più di forza bruta. Parere non condiviso da
tutti,
> ma a me hanno sempre dato questa impressione.
>

Dai, così è un po' ingeneroso. Il fatto è che sono applicabili ad una classe
di problemi molto ristretta. Pensa ad esempio all'antenna dello ST5:
https://en.wikipedia.org/wiki/Evolved_antenna
secondo me è un capolavoro di tecnologia!

> Oggi si tende a "differenzializzare" tutto. Non so se hai sentito, ma deep
> mind ha ideato i computer differenziali che sono praticamente delle reti
> neurali dotate di memoria e turing complete. So che sono un'estensione
> delle RNN e delle LSTM, ma non me ne sono ancora interessato.
> Troppa troppa roba... e poi per addestrarle devi avere dei cluster con
> almeno 200 GPU.
>

No, non conosco il progetto e non trovo riferimenti... Hai qualche link?

>> Il mese scorso, ad esempio, un collega di mia moglie doveva *****izzare una
>> serie di video presi al microscopio per quantificare come/dove certi
>> "cosetti" si spostavano in una cellula (sorry ma io di biologia non capisco
>> un tubo!). Gli ho fatto in tre ore un programmino in Java che faceva
>> K-mean clustering su ogni frame e poi prendeva le traiettorie dei centroidi.
>> Java non lo conosco, e se lo dovevo fare con una libreria, dopo due ore
>> ancora stavo leggendo la documentazione :D
>
> Neanch'io conosco Java. Venendo dal C e C++ non mi è mai piaciuto! Ho una
> sorta di rifiuto.
>

Idem. Putroppo a volte è l'unico modo di scrivere e passare applicazioni a
chi non è programmatore (e che quindi non ha un environment adatto a far
girare un po' di tutto). Grazie al cielo non mi capita quasi mai tale
evenienza! :)

>> Di Rust ho letto la documentazione e l'ho anche provato per un po', ma non
>> lavoro sul campo dove quel linguaggio da il massimo (programmazione di
>> sistema), quindi non l'ho iniziato ad usare costantemente.
>> Poi, personalmente, ho lavorato così tanti anni in C e in C++ che non mi
>> da fasti***** l'idea di dover gestire memoria, threads e sincronizzazioni a
>> mano, visto che mi viene naturale. Sono sicuro che invece per tutti coloro
>> che non c'hanno passato decenni sia un incubo. Immagino dipenda dal
>> background che uno ha.
>
> Anch'io ho lavorato in C++ per molti anni, però non ne sento la mancanza
> sinceramente. A me piace provare sempre nuovi linguaggi. Mi pare che Rust
> sia di livello più alto del C++. Sbaglio? Devo ancora leggere la
> documentazione.
>

Certo, Rust è a più alto livello del C++, e ha un sacco di "sbandate" verso
i linguaggi funzionali.
Intendiamoci, è un linguaggio di tutto rispetto, ma non mi ha preso più
di tanto... Son gusti personali.

> Vorrei qualcosa veloce quanto il C++, ma più espressivo.
> Ci sarebbe il linguaggio D, ma non ha mai preso piede che io sappia.

Beh, il D è un progetto morto da secoli :)

Il C++ è espressivo quanto lo vuoi far essere espressivo: scrivere la stessa
identica cosa con le STL, con le boost o con le QT ti tira fuori tre codici
completamente diversi! Il problema del C++ è proprio quello, che è tanto,
tanto complesso, e l'ecosistema a seguito è immenso e incosistente.

Se usi Python direi che sei al top dell'espressività dei linguaggi ibridi
oggetti/funzionale, almeno come media di righe per operazioni (non ho la
fonte ma non è difficile da trovare).
Poi dipende su cosa lavori: per certe cose uno script in mathematica è lungo
solo due righe contro le cento di python! :)

Ciao!
Kiuhnm Mnhuik 12 Mag 2017 21:32
On Friday, May 12, 2017 at 8:16:57 PM UTC+2, fma...@gmail.com wrote:
> On Thursday, May 11, 2017 at 7:09:41 PM UTC-4, Kiuhnm Mnhuik wrote:
>> On Thursday, May 11, 2017 at 6:24:49 PM UTC+2, fma...@gmail.com wrote:
>>> Qualche anno fa, quando avevo più tempo libero, m'ero interessato alle
>>> reti a topologia variabile generate tramite algoritmi genetici. Roba
>>> interessante che è stata famosa per un po', adesso sparita.
>>
>> A me gli algoritmi genetici o evolutivi in generale non sono mai piaciuti
>> perché alla fine sono poco più di forza bruta. Parere non condiviso da
tutti,
>> ma a me hanno sempre dato questa impressione.
>>
>
> Dai, così è un po' ingeneroso. Il fatto è che sono applicabili ad una
classe
> di problemi molto ristretta. Pensa ad esempio all'antenna dello ST5:
> https://en.wikipedia.org/wiki/Evolved_antenna
> secondo me è un capolavoro di tecnologia!

Te l'ho detto che non mi piacciono... Ma vedi questo:
https://blog.openai.com/evolution-strategies/

>> Oggi si tende a "differenzializzare" tutto. Non so se hai sentito, ma deep
>> mind ha ideato i computer differenziali che sono praticamente delle reti
>> neurali dotate di memoria e turing complete. So che sono un'estensione
>> delle RNN e delle LSTM, ma non me ne sono ancora interessato.
>> Troppa troppa roba... e poi per addestrarle devi avere dei cluster con
>> almeno 200 GPU.
>>
>
> No, non conosco il progetto e non trovo riferimenti... Hai qualche link?

https://deepmind.com/blog/differentiable-neural-computers/

> Certo, Rust è a più alto livello del C++, e ha un sacco di "sbandate" verso
> i linguaggi funzionali.
> Intendiamoci, è un linguaggio di tutto rispetto, ma non mi ha preso più
> di tanto... Son gusti personali.

La programmazione funzionale mi piace, ma non fino ai livelli di Haskell. Li si
raggiunge il fanatismo.

> Se usi Python direi che sei al top dell'espressività dei linguaggi ibridi
> oggetti/funzionale, almeno come media di righe per operazioni (non ho la
> fonte ma non è difficile da trovare).

Python va bene per "pilotare" librerie esterne, ma altrimenti è molto lento.
Inoltre è praticamente single-threaded.
Di tanto in tanto voglio poter scrivere del codice veramente veloce.
Julia promette velocità, ma non è general purpose. Inoltre non so se prenderà
piede.

> Poi dipende su cosa lavori: per certe cose uno script in mathematica è lungo
> solo due righe contro le cento di python! :)

Be', mathematica è un "linguaggio" a parte!
fmassei@gmail.com 13 Mag 2017 00:24
On Friday, May 12, 2017 at 3:32:56 PM UTC-4, Kiuhnm Mnhuik wrote:
> <snip>
> https://blog.openai.com/evolution-strategies/
> https://deepmind.com/blog/differentiable-neural-computers/
>

Grazie mille dei link! Ora vado un po' di fretta, volevo rispondere al
resto e leggermi questi con calma: rispondo ora e domani e ti dico!

> La programmazione funzionale mi piace, ma non fino ai livelli di
> Haskell. Li si raggiunge il fanatismo.
>

Allora credo di essere un fanatico! :)
Il problema di Haskell è uno solo: è difficile fare I/O. E tutti i programmi
devono fare I/O, chi più chi meno. Non è neppure immediato isolare una
serie di funzioni scritte in Haskell in una libreria richiamabile in un
altro linguaggio. Questo lo rende "poco pratico". E per "poco pratico"
intendo, nei fatti, inutile :(
Certo è che lo stu***** dell'Haskell mi ha fatto diventare un programmatore
migliore, su questo non c'è dubbio. Spero abbia fortuna almeno in quello,
come linguaggio di stu*****, stile Pascal.

> Python va bene per "pilotare" librerie esterne, ma altrimenti è molto
> lento. Inoltre è praticamente single-threaded.
>

Ah sì. Python è lentissimo. Ma il tuo tempo costa meno del tempo macchina,
per cui... è il linguaggio perfetto per scrivere male ma in fretta :)

> Di tanto in tanto voglio poter scrivere del codice veramente veloce.
> Julia promette velocità, ma non è general purpose. Inoltre non so se
> prenderà piede.
>

Non credo. Personalmente, se devo scrivere codice che vada ad una velocità
decente, scrivo in C. Anche il C++ secondo me ha troppo overhead. Il fatto
è che la necessità di scrivere codice decente non c'è quasi mai. Meglio
usare un linguaggio che i ragazzini già conoscono dall'università.

Non sono sempre stato così... cinico, te lo dico. Le mirco-ottimizzazioni
erano (e sono) una delle mie passioni. Purtroppo però il mondo è quello
che è: se bisogna portare a casa la pagnotta, qualsiasi sia il ruolo che
uno ricopre, è necessario adeguarsi :'(

> Be', mathematica è un "linguaggio" a parte!
>

Certamente, e di tutto rispetto! Molte cose le scrivo in M e non le riporto
neppure in altri linguaggi: se non devono girare in produzione chi me lo fa
fare? :)
Ancora, IMHO, i linguaggi sono degli strumenti: prima si vede cosa c'è da
fare, poi se ne sceglie uno!

Ciao!
Kiuhnm Mnhuik 13 Mag 2017 02:26
On Saturday, May 13, 2017 at 12:24:49 AM UTC+2, fma...@gmail.com wrote:
> On Friday, May 12, 2017 at 3:32:56 PM UTC-4, Kiuhnm Mnhuik wrote:
>> <snip>
>> https://blog.openai.com/evolution-strategies/
>> https://deepmind.com/blog/differentiable-neural-computers/
>>
>
> Grazie mille dei link! Ora vado un po' di fretta, volevo rispondere al
> resto e leggermi questi con calma: rispondo ora e domani e ti dico!

Vai con calma, tanto ancora non li ho letti neanch'io :)

>> La programmazione funzionale mi piace, ma non fino ai livelli di
>> Haskell. Li si raggiunge il fanatismo.
>>
>
> Allora credo di essere un fanatico! :)
> Il problema di Haskell è uno solo: è difficile fare I/O. E tutti i programmi
> devono fare I/O, chi più chi meno. Non è neppure immediato isolare una
> serie di funzioni scritte in Haskell in una libreria richiamabile in un
> altro linguaggio. Questo lo rende "poco pratico". E per "poco pratico"
> intendo, nei fatti, inutile :(
> Certo è che lo stu***** dell'Haskell mi ha fatto diventare un programmatore
> migliore, su questo non c'è dubbio. Spero abbia fortuna almeno in quello,
> come linguaggio di stu*****, stile Pascal.

Da come parli, la pensi come me. Gli haskeller fanatici dicono che le monadi
sono l'unico modo corretto per fare I/O.
A proposito, se t'interessa è uscito un libro "pratico" su IDRIS:
https://www.amazon.com/Type-driven-Development-Idris-Edwin-Brady/dp/1617293024

>> Di tanto in tanto voglio poter scrivere del codice veramente veloce.
>> Julia promette velocità, ma non è general purpose. Inoltre non so se
>> prenderà piede.
>>
>
> Non credo. Personalmente, se devo scrivere codice che vada ad una velocità
> decente, scrivo in C.

Julia però unisce la rapidità di sviluppo di Python alla velocità del C.
E' un bel vantaggio rispetto a usare Python o il C.

> Ancora, IMHO, i linguaggi sono degli strumenti: prima si vede cosa c'è da
> fare, poi se ne sceglie uno!

Senz'altro, però mi piace provare qualcosa di nuovo e moderno di tanto in
tanto.

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Matematica. La regina delle scienze | Tutti i gruppi | it.scienza.matematica | Notizie e discussioni matematica | Matematica Mobile | Servizio di consultazione news.