Press "Enter" to skip to content

GOTO 2018 • Machine Learning: Alchemy for the Modern Computer Scientist • Erik Meijer


[Musica]
nel fare carriera praticabile è quello di ottenere cercare di
Semplifica le cose che non mi piacciono complicate
cose perché semplicemente non mi piacciono
cose complicate II come semplicità
e quando guardi l’ apprendimento del formaggio
c’è molta complessità e c’è
un sacco di matematica complicata e cosa
Ho intenzione di dirvi oggi è che
davvero è tutto come la matematica dell’asilo
tutto ciò che hai imparato in alto
scuola o scuola elementare e volontà
ti parlo molto del perché macchina
l’apprendimento funziona ed è anche molto
di divertimento come i trucchi di programmazione coinvolti
e in realtà penso che la programmazione
i trucchi sono più interessanti di così
la gente potrebbe notare che sono stato fortunato
dopo che ho lavorato per Microsoft, allora
ho provato l’avvio quindi posso unirmi a facebook
Attualmente su Facebook abbiamo un gruppo
che funziona con l’apprendimento della macchina musicale
rendere gli sviluppatori più produttivi e
c’è un corso a due blocchi che di recente
è uscito bene che descrive alcuni dei
lavoro e benessere sulla deselezione e
l’altro riguarda il libro automatico
fissare così ora Facebook abbiamo
programmi che combattono le rocce usando
statico tradizionale e ora è così
che abbiamo programmi basati su ml che risolvono
i bug per te e poi penso che sia così
accettabile e vado a mostrare
tu oggi è come un pò del
magia dietro le quinte si va un po ‘
un po ‘come lo sai nella mia carriera I
ero un accademico e poi ho dovuto
insegnare ingegneria del software e io ero
insegnare ingegneria del software ma mi sentivo
come un macellaio vegetariano e VB
come ho lavorato su Phoebe dopo così
è una cosa appropriata per
penso, ma io ero cattolico a insegnare così
Francese in orecchino e che non ha idea di come
la gente ha scritto grandi programmi nella pratica
e quello che ho scoperto sono due cose due
cose che ho imparato come sai quando
Mi sono trasferito dal mondo accademico per diventare come te
conoscere il lavoro sul codice nel mondo reale e
il primo è che le macchine che
noi programmiamo non sono matematici
astrazioni sono macchine fisiche
e così prima hanno avuto modo di parlare
qualcuno è venuto e ha detto grazie Eric
per tutte le tue lezioni su funzionale
la programmazione II è stata molto educata a questo
gentiluomo ma non penso funzionale
programmazione e aderisce a questo
principio se pensi a Haskell
dove le persone guardano il mondo come
conosci questa pura astrazione che sei gentile
di dimenticare che sai che la macchina è
in realtà è come se tu non lo sapessi puro
cosa ha una cache l2 che ha mantenuto
come se conoscessi una gerarchia di memoria te
devono comunicare tra due macchine
che è più lento di ordini di grandezza
come se sapessi ottenere qualcosa da un
registrati e, infine, se il tuo codice
diventa popolare se diventa utile
deve diventare veloce quindi è per questo che io
spesso dire pensa come un fondamentalista così
puoi ancora fare programmazione funzionale
nella tua mente ma devi codificare come a
hacker perché il tuo codice ha successo
il tuo prodotto ha successo deve
corri veloce in modo che la programmazione non sia una fata
racconto dove puoi mettere o forse è un
fiaba ma tu metti tutte le cose
in alto senti ancora quel tipo di cose simili
cosa sotto e poi la prossima cosa è
se pensi al software
metodologia software di lavoro finito
seguendo un piano alla fine è proprio così
sulla produzione di software e il codice è
la valuta quindi è tutto sul codice che è
tutto su come produrre codice di modifica del codice
modifica codici codice refactoring e quindi
ovviamente spingendolo e altrettanto rapidamente
alla produzione il più possibile
quando stavo parlando di questo un paio di
anni fa le persone erano come mazzette ma ora
tutti stanno facendo un dispiegamento continuo
e integrazione continua così è
non è strano da un punto di vista
più comunque dopo che intendo quest’anno
quindi per l’ingegneria è il suo 50esimo
compleanno e così per 50 anni che abbiamo
Stavo pensando di scrivere codice e io
non so per quanto tempo abbiamo avuto questi
il movimento alla conferenza yahoo prima
e siamo ancora qui come sai
guarda quante persone sono qui
1600 persone sono qui per quasi un pieno
settimana e forse una settimana intera se lo fanno
i laboratori perché vogliono imparare
come scrivere codice o come scrivere meglio
codice o come scrivere codice migliore
qualunque sia la permutazione che vuoi
un po ‘ come lo sai un po’
deludente è come perché non possiamo
scrivi il codice forse noi come esseri umani siamo solo
non abbastanza intelligente per scrivere codice e e
forse dovremmo guardare ad altre cose dentro
società non siamo abbastanza forti per
scavare buche così ci piace inventare
macchine per scavare i buchi per noi e
allora se vogliamo diventare come sai, fallo
roba fisica bene andiamo in palestra noi
fallo per divertimento forse dovremmo fare il
la stessa cosa per il codice giusto forse lo siamo
semplicemente non bravo a scrivere codice, perché siamo noi
provando così duramente perché non lo ammettiamo
Sono umano solo non posso scrivere codice ok
e lascia che le macchine facciano questo per noi
e questo è qualcosa che ho mantenuto
sai che mi sono reso conto qualche anno fa o a
alcuni anni fa sì, alcuni anni fa e
poi l’ anno scorso ho avuto la sensazione che tu lo sappia
ha iniziato questa nuova squadra che è completamente
incentrato sull’apprendimento automatico ho buttato via
tutti i vecchi linguaggi di programmazione roba
tutta quella roba non interessante la
il futuro è lasciare che le macchine facciano il lavoro
e penso che non ci vorranno 50 anni
perché le macchine diventino migliori
programmazione di noi quindi voglio
grazie per questo piccolo viaggio e
giù nella tana del coniglio del machine learning
e questo è
come sai che sono io e questo è il
coniglio bianco che sono quello che ha
sai che ora seguirò
Non sono l’ unico a dirlo
ci sono stati un paio di discorsi
machine learning in questa conferenza e
e la gente lo definisce come molto sexy
titolo software 2.0 giusto così tanto
cose che stai facendo nel tuo lavoro di giorno
è un software 1.0 ma come javascript
quadri sai anche programmare
si evolve e si parla tanto di
software 2.0 e così per 2.0 è e
di solito è tenuto come sai focalizzato
sull’apprendimento profondo in cui ti alleni a
neurone che ti alleni i pesi di a
rete neurale e dandole esempi e
sarà come se lo sapessi imparare
funzione e per fare ciò che vuoi
fare così questa è la differenza forse per
come una normale terminologia per regolare
le persone e così per 1.0 abbiamo esseri umani
trasformare il caffè e fare il codice e così via
per 2.0 invece stiamo prendendo dati e
abbiamo una magia che non è così magica
e trasformato in un modello ora macchina
imparare le persone che è uno dei
ragioni per cui l’ apprendimento automatico può sembrare
così intimidatorio che amano usare
parole costose non mi piacciono costose
parole ma ed è quello che taglierò
come sai, ti aiuta a diventare
dissipare molte di quelle parole costose
ma c’è qualcosa in questo come
modello si può dire di aggiungere questo codice ma
c’è qualcosa che mi piacerebbe davvero
speciale sul modello e precisamente su quello
come programmatori umani siamo spesso finiti
promettere e consegnare se si guarda
la funzione che scriviamo o sai a
Classe o metodo Java dice oh questo
la cosa prende una stringa e restituisce un
intero e in un certo senso stiamo mentendo
perché questa cosa è tenuta come spesso
facendo un’ipotesi potrebbe restituire un errore
o potrebbe non piacere che potrebbe avere libri
quindi quando diamo questo alle specifiche
di una funzione come quella del lavoro
letteralmente troppo promettenti sotto il
se si guarda a ciò che il modello fa
dice oh questo è un gatto con questo
probabilità e un cretino con quello
probabilità in una ciotola di guacamole con
tale probabilità è così questi modelli sono
quasi sul fatto che lo sono
indovinando e penso che sia molto
liberando così anche se ne hai avuto uno
per dimenticare tutta questa macchina
roba di apprendimento penso di pensare in termini
di come l’ incertezza e permettendo il tuo
programma per ottenere come esprimere il fatto
che sei incerto sul risultato
è una nozione molto potente e ora
invece di codice la nuova valuta o come
la gente dice che il nuovo petrolio è dati va bene
quindi non stiamo più scrivendo codice
raccogliendo dati e che stiamo pulendo
pensa come tu sai trasformarlo
normalizzandolo e poi lo stiamo usando
per allenare un modello di macchina o un allenamento come
usandolo per la visualizzazione così e
invece del codice come sono i dati degli artefatti
il divario come nuova cosa che noi
valore ed ecco un esempio questo è il
il più semplice del mondo ciao
di apprendimento automatico e ottieni un sacco
di caratteristiche di fiori e ora hai
per prevedere quale tipo di fiore è
e qui ti mostro anche la differenza
tra ciò che un normale programmatore farebbe
fare e direbbe come va bene II definire
un metodo che prende una descrizione di un fiore
di un fiore e ti dà una stringa che
dice che questo è il fiore ma la macchina
imparando un po ‘più modesto noi
darti una distribuzione di probabilità così
se guardi questa cosa è come la
l’algoritmo guarda quel fiore detto
sì, penso che sia un cito quindi potrebbe
sii anche quest’altro o quell’altro
per quello medio dice sì
sono sicuro che sia il versicolor che sono
sono sicuro che puoi vederlo se guardi
alla distribuzione e se guardi
l’ultimo e quello dovrebbe essere un
fiore che assomiglia un po ‘al
entrambe le mie abilità di disegno non lo sono
così bello ma tu sai, si spera, vedi
che questo tipo di like ha un po ‘
di entrambi e vedi che il
la distribuzione è non è così certa cosa
fiore questa e la stessa cosa quando
hai come lo sai
coltelli e budella e cani ora puoi
pensa un secondo tu ah, conosci i fiori
riconoscere gli animali e invece darei
tu non so come 10 milioni di danesi
Corone non potresti scrivere queste
funzioni usando la programmazione tradizionale
lingue o tecniche tradizionali no
importa quale sia la metodologia mantenuta che usi
non importa quanto bene ascolti allora
non puoi scrivere questo nel tradizionale
l’unico modo per risolverlo
problema sta usando l’apprendimento automatico così
questo è anche qualcosa come tu sai che io
non pensare fino ad ora 1.0 sparirà
ma finora l’ apprendimento automatico 2.0 apre a
tutta una nuova classe di applicazioni che noi
posso scrivere e che non potremmo fare prima
e sappiamo tutti che apri il tuo
iPhone fai foto ogni volta che lo fai
disegna una scatola attorno al viso di qualcuno
questo è un algoritmo imparato a macchina che
non si poteva scrivere a mano così ancora
se non credi nel software 2.0
guarda comunque perché lo sai
ti permette di risolvere i problemi che tu
non ho potuto risolvere prima e penso che sia
sempre una buona cosa ma come ho detto
quello che voglio a ciò che mi attrae è il
fatto che anche se volessi potrei
non scrivere questi algoritmi che io
ho appena mostrato te o questi problemi che io
ti ho appena mostrato l’uso tradizionale
tecniche ora come hai girato
dati in codice ed è relativamente
semplice questo è come ottenere la magia
dietro a ciò prendi i tuoi dati di allenamento
che contiene coppie input-output e
è un po ‘come TDD, giusto io
darti ragazzi come un sacco di
esempi di gatto e poi ci siamo divisi
loro nell’input e nell’output che alimentate
l’input per il tuo modello e quel modello
è parametrizzato da pesi calcolati
l’ ipotesi e ancora una volta questa cosa
indovina ed è onesto a tale proposito
confronti l’ipotesi con l’output
e calcoli la differenza e quale
è anche interessante se si guarda come
conosci Java o C sharp o qualsiasi altra cosa
confronti due cose che solo tu conosci
puoi solo restituire -1 0 o 1 è gentile
di anche abbastanza limitativo, perché
forse è come se lo fossi, sì
lo stesso tipo per cui vuoi tornare
come qualcosa che non è proprio come
0-1 o sbagliato, mi limito a dare un po ‘
un po ‘ come lo sai che è un po’ il
lo stesso è ciò che fa questa funzione di perdita
va bene e poi basato su quella perdita
funzione sul risultato di voi
regolare i pesi e poi si sciacqua
e ripeti e poi fino a quando non puoi
come minimizzare l’errore, ecco come
voi cosa intendete le persone con la formazione e ora
ciò che è interessante è il modo in cui
la gente diventa come sai controllare bene
questa rete neurale sta facendo è prendendo
i dati di allenamento e di separazione in
un set di prova e un set di allenamento e io
non capisco perché non facciamo questo
per gli sviluppatori regolari, se ho avuto
dando un compito allo sviluppatore e dico qui
una serie di test che dovrei conservare come il 30% di
quelle prove nella mia tasca posteriore lasciano il
lo sviluppatore diventa come tu sai costruisci il loro
programma e poi un po ‘come lo sai
Verificarlo davvero sul test che loro
non ho mai visto e non so perché
non prendiamo questa tecnica da
ciò che le persone fanno in machine learning em
comunque ora qual è il modo in cui trovi il
il minimo di una funzione bene è così
suoni magia, ma poi ne pensate
lui alle superiori abbiamo imparato qualcosa
abbiamo scoperto che lo abbiamo imparato per
trova il minimo di una funzione che è
dove la derivata è zero tutti
ricorda che sì, questo è il tutto
trucco che queste persone che apprendono a macchina
utilizzare quindi se torniamo a quest’immagine nella
per ottenere come sai minimizzare
trova i punti in cui questa è la perdita
funzionano gli errori ridotti al minimo
Devo essere in grado di differenziare il
cosa in quella scatola gialla ora quella gialla
la scatola è composta da strati e neuroni
ma se ci pensi come se fosse un computer
gli scienziati sono solo funzioni e
in realtà sono funzioni pure
quindi se la programmazione funzionale sta per
vincere è perché è nascosto in questo
scatola gialla di una rete neurale perché
queste sono pure funzioni perché il
la rete neurale non la fa io / o
non fa nulla ed è giusto
calcolo come dagli input
calcola l’ output e poi c’è
qualcosa di speciale è una pura funzione
ma è differenziabile e quindi il reale
trucco per fare l’apprendimento profondo è quello di fare
funzioni differenziabili o
capisci come fai tu
differenziare le funzioni e io no
credi davvero e non lo dirò qui
e oggi ma non penso che sia neurale
le reti hanno qualcosa a che fare con cosa
succede nel cervello ed è solo un
mazzo di moltiplicazioni e aggiunte
e che funziona molto bene su GPU ma io
Non credo che abbiamo come se sapessi che facciamo
addizione e moltiplicazione nel nostro cervello
e ma funziona ancora, ma io
semplicemente non mi piace e non penso
che queste cose sono intelligenti
dai loro esempi e imparano
da esso e aggiornando questi pesi così
Non ho intenzione di ottenere come sai fare
qualsiasi affermazione sull’IA e quindi ci stiamo muovendo
dal mondo del software 1.0 dove
gli esseri umani fanno il lavoro al lavoro di
software 2.0 dove non possiamo diventare come te
sapere giacere sotto l’albero pensando in grande
pensieri e ci limitiamo a fornire dati in questo
la cosa di ml e fuori viene un modello così ecco
un campo come lo sai il reale
implementazione del mondo ciao così
questo è il tipo di mi piace come ho detto
questo è il più semplice dei più semplici
le reti neurali più semplici quindi c’è
i dati qualcuno raccoglie i dati così
ci sono le caratteristiche dei fiori e il
fiore reale che ha mantenuto come sai
ha quelle caratteristiche allora avete bisogno di
definire un set di pesi e poi vedi
c’è il modello che ha mantenuto
moltiplica questi pesi e applica il
Funzione israeliana e poi alla fine
applica è softmax che lo trasforma in
la distribuzione di probabilità e il
più a fondo ti piacciono più questi livelli
fai più in profondità la tua rete neurale
non dobbiamo preoccuparci di questo
pensa che ci sia una cosa interessante qui
e questo è un computer interessante
problema scientifico è che questi neuroni
le reti funzionano in un dominio continuo
perché devi svolgere questa funzione
la funzione modello qui deve essere
differenziabile va bene ora tutto il
strutture che abbiamo nei nostri computer
sono clienti discreti ordini fiori
e proprio come con i database in cui siamo noi
avere l’oh l’oggetto relazionale
disadattamento di impedenza in un database simile
è una tabella di righe e ora devi
mappa i tuoi oggetti java o il tuo grafico in
le tabelle relazionali devi fare il
stessa cosa qui così il nostro calcolo
il paradigma è tenuto come sai
scomodo ha funzionato per database esso
non funziona per le reti neurali quindi questo
questo incastonare lì che va dal
mondo discreto al mondo continuo
è un grosso problema e se ne hai visto uno
del discorso precedente sulla fonte D
è probabile che faremo un apprendimento approfondito
codice che c’è anche un grosso problema
avere come una SDS come si ottiene il mio Pastis
che sono discreti in questo continuo
dominio ho intenzione di agitare le mie mani
che possiamo risolverlo così così davvero
è un modo per guardare una rete neurale
solo una classe in cui i pesi sono tuoi
variabili di istanza il tuo modello è a
metodo e con l’allenamento si inizializza
le tue variabili di istanza vanno bene così dentro
qualche senso è che è ancora molto simile
a quello che abbiamo fatto negli ultimi 50 anni
è solo una programmazione orientata agli oggetti
dove invece di inizializzare lo stato
impariamo lo stato e quindi assumiamo
possiamo farlo tutti e vediamo come può
distinguiamo il codice e, se lo fai
e tu google un po ‘lo farai
trovare un sacco di grafici come complicati
carta CSEC lo sai e c’è questo
cosa posteriore prop come un functor che utilizza
teoria delle categorie per descrivere una schiena
propagazione
oh mio rigoroso emulare simmetrico monoidale
categorie oh mio Dio
Voglio dire che non è l’ argomento per come il
Stalker per conferenza giusta e poi
c’è come guardare questo sul
bene, hai ragione?
guarda tutti questi simboli greci
non riesco nemmeno a pronunciare come loro okay
troppo difficile bene per il mio cervello si
ho bisogno di qualcosa di veramente semplice come il mio
il cervello è la dimensione di una nocciolina che noi tutti
lo sappiamo e abbiamo bisogno di una matematica davvero semplice
e, beh, ti mostrerò questo
è come mettere un tubo da giardino su questo
dock destra il cane sembra davvero
impressionante lo spruzzi con il giardino
tubo e poi scopre che all’interno di tale
il grande cane era un cane davvero nascosto
non è così impressionante ed è così
non è che quella merda non sembri così spaventosa
facciamo il prossimo passo nel nostro viaggio
e siamo come se stessimo cucinando il coniglio
buca e ora vedremo come
stiamo per implementare la differenziazione
e lo faremo con il doppio
numeri così sono stati inventati due numeri
William Clifford, lo sai da qualche parte
tra il 1845 e il 1879
quindi sono centinaia di anni fa e duali
i numeri sono davvero un po ‘come abbastanza
notevole ricordiamo tutti complesso
i numeri, che è tra l’altro come grande
denominazione numeri complessi giusti wow che
deve essere davvero difficile e perché lo sarebbe
qualcuno li chiama o numeri immaginari
oh loro non esistono comunque come se
li chiami numeri complessi immaginari
numeri questi sono numeri a più bi
dove piazza uguale a meno 1 tutto a posto
ora pensi che ho quadrato uguale a meno 1
perché perché non lo faccio perché ho appena
implementato ho paragonato quindi i 3 buoni
i valori sono meno 1 0 o 1, quindi facciamolo
cosa succede quando prendiamo complessi
numeri e al posto di I quadrati uguali
meno 1 prendiamo I quadrato uguale a 0
ovvio bene i numeri bene complessi erano
inventato in 15 qualcosa e poi questi
i numeri duali sono solo numeri complessi
con al posto di I il quadrato è uguale a meno 1
esso
uguale a zero sono stati inventati 300 anni
più tardi quindi forse non è così ovvio ma
per un informatico dovrebbe essere
ovvio ma questa è una scelta arbitraria
ora quando fai quella scelta ottieni
qualcosa di veramente veramente sorprendente e cioè
che se si calcola una funzione su a
doppio numero quindi se si calcola F di a
più B epsilon calcola f di un così esso
calcola il valore originale di quello
funzione applicata a ae derivata
lo calcola allo stesso tempo non lo è
così forte
di nuovo non devi capire come
funziona, non capisco come funziona
prendi semplicemente numeri complessi invece di
Io quadrato equivale meno uno che dici io
Il quadrato è uguale a zero per evitare di confonderci
chiama Ice I Epsilon perché devi
distinguere tra loro e poi noi
ottenere questo fantastico incredibile così ma giusto
mantenuto come l’introduzione di questa nuova forma di
numeri che possiamo semplicemente calcolare calcoliamo
il derivativo ora è tutto ciò che è matematico
che hai bisogno di questo è tutto il resto
devi capire l’apprendimento profondo e
Indovina cos’è questa matematica da 200 anni
fa così non potrebbe essere così difficile perché
Erano molto più intelligenti ora no
persino i computer hanno solo allora
avere stilografiche e ora se davvero
voglio capire perché questo funziona è
basato sull’espansione di Taylor su Taylor
espansione che è roba davvero pazzesco tutto
destra
questo signor Taylor ti ha scoperto che tu
può prendere una funzione e puoi scriverla
c’è una somma infinita di quel tipo di
implica fattoriale e come lo sai
esponenziazione che è davvero pazzesca e
è come dal 1715 è come se avesse papà
mi piace roba davvero fantastica e ora lo prometto
tu non farei nessuna teoria di categoria
ma non posso aiutare me stesso e quindi se tu
è come se sapessi definire questa cosa
solleva se funziona da valori normali
su due numeri allora si scopre che
quella cosa che funzione è una funzione
per G è uguale a T of F comporre G di
G e che è molto più bello della catena
regola
Non so se ricordi la catena
regola non riesco a ricordare che ho sempre
devo trovarlo su Wikipedia ma noi
non risulta che non abbiamo bisogno del
regola della catena perché con numeri doppi
deriva da questo fatto
è un funtore ora questi matematici
sono un po ‘strani, hanno ragione
scrivi un epsilon più B, ma loro davvero
significa che è una coppia di due numeri a e B
quindi questo plus è solo un modo strano per
scrivi una coppia quindi se abbiamo come sai
come scienziati informatici in realtà
rappresentano questi numeri come coppie e noi
facciamo la definizione delle regole che vedi
se ho due coppie e le aggiungo allora
Ti faccio sapere che aggiungo le prime parti e
Aggiungo le seconde parti se mi moltiplico
loro moltiplico le prime parti che sono
tenuto come sai solo il
moltiplicazione e poi se vedi su
nella parte destra potresti riconoscere cosa
per cosa la gente chiama la regola del prodotto
differenziazione forse si ricorda che
dalla scuola superiore, ma ancora una volta è proprio così
segue da ottenere come il calcolo di questi
cose e poi di nuovo la terza regola
qui dice che sai se applico una funzione
se sovraccarico la funzione per prendere questi
accoppia esso calcola sia l’originale
valore più la derivata del codice I
non ho visto abbastanza codice in questo
conferenza abbiamo bisogno di più codice lì
non può essere un discorso senza parentesi graffe
a meno che non si tratti di Erland tutto bene così
Sto usando Scala qui, quindi questo è come un
traduzione diretta di tali regole in
Scala tutti avrebbero potuto scrivere questo
giusto è semplicemente facile, c’è un doppio
numero è solo un paio di numeri il
parte reale e la parte epsilon cap e
sai che devi solo dirgli come
aggiungi, moltiplica, dividi e come
tu fai il seno e il coseno e poi io posso
è necessario convertire un numero normale in a
numero duale questo è tutto a posto
il codice così semplice segue completamente
dalla matematica non dovevi pensare
qualsiasi cosa tu possa imprimere a tutti
colleghi mostrando questo gatto come
super cool come usa tutto Unicode
e fantastico e ora se li guardi
reti neurali l’aereo come sai
come condividere il loro berretto
quando la gente parla del tutto
rete collegata tutti questi strati sono gentili
di completamente connesso quindi se guardiamo al
il più semplice degli atti più semplici come la forma
di un neurone che ha solo un valore
e lo moltiplica e si moltiplica
il risultato è che utilizza la condivisione
quindi questo è come se lo sapessi
le reti neurali più semplici che io possa trovare così
questa cosa dovrebbe essere in grado di
differenziare un’espressione che sembra
così così diamo un’occhiata ad alcuni
espressioni qui così prima di tutto è
solo prendendo un quadratico standard
equazione e possiamo tagliare come sai
per trovare la derivata abbiamo solo
chiama quella funzione con il doppio numero
e ora sappiamo che calcola entrambi i f
di v e la derivata di F applicata a
v ora guarda il secondo esempio questo è
un modo davvero complicato per calcolare
la funzione seno usa assegnazioni
scorre tutte le grandi cose che amiamo
nella programmazione di assegnazioni di cicli di scrittura
lo stato mutabile risulta che è possibile
prendi semplicemente la derivata di una funzione
così fantastico non è così
e poi l’ultimo costruisce questa catena
di quello ti ho mostrato questo tipo di
condividendo le cose ovviamente ne usa un po ‘
stato mutabile due quindi è un po ‘come
definisce una variabile e poi solo
moltiplica questa cosa con se stessa ora
guarda il grafico qui questo è
quello che stavo dicendo così come lo sai
quando esegui il tuo codice non lo sei
correre su un’astrazione matematica
perché la complessità di quest’ultimo
funzione è lineare, in modo che siano più io
rendi quella catena più lunga la
il calcolo dovrebbe durare ma grazie a
la magia della JVM guarda questo
più mi moltiplico più velocemente diventa il mio codice
oh non è incredibile che la gemma sia un
macchina magica come la sai di più
lavoro fa più velocemente diventa e poi
guarda quelle spine che sono la tua spazzatura
collezionista questa è la ragione per cui le persone
piace scrivere C ++ nel mondo reale loro
non mi piace la JVM perché è
imprevedibile
va bene miliardi come se non guardassi
a queste cose e tu non ottimizzi
il tuo codice e pensi che sia come un
astrazione matematica questo è ciò
succede tutto bene
ora queste reti neurali hanno molteplici
variabili quindi ho bisogno di un po ‘come
misura il mio codice da prendere più volte
parametri che non devi capire
questo codice osserva solo quello in alto
le linee sono le stesse e poi qui sotto
quello che sto facendo è che rappresento un
elenco di variabili come vettori di piedi sparsi
e poi continuava a fare punto per punto
Inoltre, sembra vecchio, ma qualcosa
male succederà quando lo faremo
otteniamo un comportamento quadratico, quindi se solo
prendere e variabili e io li aggiungo
su e voglio mostrare che io ancora
so dalla programmazione della shell, quindi uso
predefinito lasciato invece di un ciclo e quando
Lo faccio e corro questo codice che diventa
quadratico ora guarda questo grafico
non ha più questi picchi
quindi se vuoi il tuo garbage collector
comportarsi correttamente con il codice quadratico sulla JVM
questo è un consiglio per le prestazioni di Eric
Meyer va bene ma questo codice è maggiore
Penso che sia abbastanza brutto e ora lo è
non è l’ unica volta che capita bene
questo è un post del blog eccellente qui come
è come un sacco di esempi
sistemi del mondo reale che erano
accidentalmente quadratico ora ricordo
qualcosa da molto tempo fa quando
Ero ancora un programmatore di Haskell
c’era qualcosa con le cose
erano quadratici per caso e quello era
quando inverti una lunghezza una lista se tu
invertire una lista in Haskell che è
quadratico e qui come lo sai, ecco
come codi ascolti e skyline che fai
Inversione e tu guardi lì è
quadratico non guardare le punte
Non è che sorprendente è come si sa
guarda che questi picchi picco si dice
ordini di grandezza più lenti grazie a
netturbino è pazzo
è il 2018 ma in 20 nel 1986 l’uso di John aveva
un trucco su come implementare le liste usando
funzioni pensi che perché dovresti
Fai quello
si implementa una lista che è
qualcosa di concreto con
funziona qualcosa di astratto e cosa fare
ottieni in modo simile questo quadratico
il comportamento scompare e vediamo come
funziona così tu rappresenti la funzione
da una lista e in pratica cosa fai
il trucco è che tu rappresenti la funzione a
elenca la concatenazione che è tempo lineare
dalla composizione della funzione che è
tempo costante e poi quando vuoi
quindi attiva una funzione dell’elenco – a
elencare di nuovo in una lista, basta applicarlo
alla lista vuota e la magia accadrà
tutto bene questo è un grande trucco e e
guarda questo funziona così se mi piace
applica questo trucco in modo da vedere lì che io
rappresenta l’elenco con una funzione da
elenco per elenchi ora diventa fermo
ricorsivo sta usando accumulando
parametri ma guarda quel grafico
più lunga la mia lista che inverto più velocemente
la JVM non è così sorprendente, intendo
quindi di nuovo se vuoi far andare la tua JVM
Veloce basta dargli più lavoro e lo farà
corri più veloce ora ecco la domanda può
usiamo questo trucco per i numeri duali come
bene possiamo ottenere come prendere due numeri
dove abbiamo avuto questo effetto quadratico e
rappresentano i numeri come funzioni di te
pensa che Eric ti abbia preso il pacco?
Di nuovo Amsterdam , perché vorresti
rappresentare i numeri come funzioni e quindi
pensa che vada più veloce , è vero
ma dobbiamo essere un po ‘di più
diritto attento per ottenere come fare
che dobbiamo capire quei numeri
non sono di Molloy se vuoi impressionare
i tuoi colleghi tu dici sì Lister
monoidi ma i numeri sono anelli e e
l’anello come lo sai anche il nostro
il presidente sa che un anello è giusto
qualcosa che ha due operazioni
addizione e moltiplicazione
sono sia associativi che commutativi
e si distribuiscono l’un l’altro e
quindi il fatto che abbiamo a che fare
numeri e abbiamo un anello ci permette di
rappresentano numeri come funzioni e questo
è come rappresentiamo facciamo queste funzioni
di nuovo ora diamo un’occhiata al codice che noi
ha scritto per i numeri degli strumenti e vedere se
c’è qualcosa che assomiglia alle liste
qui va bene , guarda questo , quando
aggiungiamo due cose che ora sto chiamando
ciò che era Epsilon è questo
cosa i matematici chiamavano tangenti e
hanno mantenuto la parte normale che chiamano
primordiale ma uso solo la codifica a colori
è molto più facile che mi dispiace che ci sia
giallo e nero e vedi che se tu
non può piacere guardare la parte gialla che è
sempre della forma qualcosa di giallo
volte qualcosa di nero, giusto eh
annotare un motore di aiuto grammaticale
qualcosa di giallo è qualcosa di giallo
volte qualcosa di nero più qualcosa
volte giallo qualcosa di nero o è
qualcosa di giallo volte qualcosa di nero
sembra una lista giusta per una lista
un valore concatenato a una lista così tutto
questi numeri che stavano creando look
molto simile alle liste in modo che possiamo rappresentare
loro come funzioni ora mettiamo il
caso multivariato in pila per ora
per prima cosa rappresentiamo i numeri come
le funzioni ah non sono così belle
chi qui avrebbe pensato questo
rappresentando ciò che potevi rappresentare
numeri come funzioni se suonano e
ed ecco quello che fai che rappresenti a
numero come una funzione che richiede due
parametri uno per la moltiplicazione I
vuoi l’aggiunta e ritorna
un altro numero quindi la rappresentazione di
a più B è la rappresentazione di un e
poi lo passi R e poi il
la rappresentazione della moltiplicazione B è
così e quindi non ne abbiamo bisogno
uno e poi l’ultimo il
rappresentazione di un numero di volte a
costante è la rappresentazione di a
numero e poi lo si moltiplica
costante con il parametro in entrata così
sembra molto simile a ciò che noi
ha fatto con le liste tutto bene così questa diapositiva
qui ti mostra come rappresentare i numeri
come funzioni e sta andando per rendere il nostro
codice più veloce ah
bello bello
sono eccitato quindi scriviamo il codice
e quello che sto per fare lo farò
mantienilo un po ‘semplice, non lo sono
andando a fare l’aggiunta sto solo andando
implementare la moltiplicazione per a
funzione quindi questo è il codice di Scala e
vedi solo che ha questo epsilon
ora diventa un metodo che è solo un
funzione e ti porta da un valore
e restituisce un valore ed è giusto
segue esattamente questo schema qui no
ho bisogno di farlo ma ah quando ho
funzioni invece di valori che perdo
condivisione perché se si dice che hanno un
grande lista e ho concatenato con se stesso
ora quella grande lista viene valutata solo una volta
ma se rappresento quella lista come a
funzione ora che la funzione è condivisa ma
quella funzione verrà ora applicata a due
valori diversi per cui il calcolo è
ah duplicato così mi sono sbarazzato del quadratico
infermiera in un modo e si apre in
un altro così posso mostrare qui semplice
esempio in cui mi sono appena costruito e
liste e ho mantenuto come sapete aggiungere un
si dirige verso ciascuna di queste liste e indovina
quello che diventano quadratici ora facciamo
guarda cosa significa questo per il nostro doppio
i numeri ora ci tengono davvero dentro
le discariche e diamo un’occhiata a questa condivisione
cosa ancora una volta che è la cosa che noi
bisogno di e per le nostre reti neurali quando io
fai questo guarda diventa esponenziale oh
mio Dio ma guarda come liscia quella curva
è bello quanto voglio dire questo è
come dritto come nessun garbage collection
problemi giusti come burro eccetto
che è esponenziale, quindi io
pensavo che avrei preso qualcosa che era
quadratico trasformarlo in qualcosa di lineare
e quello che ho ottenuto è stato qualcosa di esponenziale
hmm non va bene, quindi dovremmo
lascia qui e vai a casa o vuoi farlo
vedi il resto della storia bene questo è
esattamente dove arriva l’anello ricorda
l’anello ricorda quello che ti ho detto
l’anello hai visto il film il
ciao
dovresti comunque essere davvero bravo
bene l’anello ti permette di fare è
ricordati che implementeremo
moltiplicazione per applicazione di funzione
se guardi all’espressione qui sopra
le prime otto volte B più una volta C it
chiama questa funzione due volte o fa il
moltiplicazione con un doppio di quello
anello ti permette di fare è questa cosa è
come sai che è come Chetty
di nuovo questo è proprio come distribuito
sistemi è moltiplicato per due volte
Chetty cosa facciamo quando abbiamo costruito a
questo sistema radicale rendiamo grosso modo
quello che facciamo è noi invece di fare il
moltiplicazione due volte come va bene
moltiplicando B con a e C con un possibile
basta aggiungere B e C insieme e poi
moltiplicalo per un modo che è così grosso
questo è solo chunky contro loquace
commento modello di progettazione che tutti conosciamo
è chiamato l’anello, quindi ora lo sai
è come se sapessi che dovremmo fare domanda
il principio dell’anello e grosso contro
chiacchierone quindi facciamo questa cosa
um chunky um ma ora quello che dobbiamo fare
è necessario prenderci cura della condivisione
perché questa funzione che stiamo chiamando
più volte quello che faremo è
stiamo andando invece di chiamare a
più volte e quindi aggiungendo il
risultati in fondo andremo a
prendi tutti i parametri aggiungili prima
e poi chiama quella funzione vuole così come
posso avere una funzione e chiamarla una volta
bene due cose prima di tutto mutabili
lo stato ci salverà come sempre e il
la seconda cosa è buona cosa che Facebook
è scritto in PHP perché PHP ha questo
molto gentile di cosa interessante e di riferimento
contando quindi useremo il riferimento
contando per ottenere come sai di ottenere
come ogni volta che duplichiamo questa funzione
semplicemente aumentiamo il conteggio dei riferimenti e
allora quando chiamiamo la funzione noi
diminuire il conteggio dei riferimenti quando il
il conteggio dei riferimenti è zero, lo sappiamo tutti
le chiamate alla funzione sono fatte e
allora possiamo chiamare questa funzione una volta con
questo parametro junky così ti vedi
non posso vivere senza uno stato mutevole e
il conteggio dei riferimenti è la migliore invenzione
poiché la luce Fred bene ecco il
codice guardiamo l’ aggiunta nulla
molte modifiche tranne che quando ne aggiungo due
numeri sto usando questi due numeri così io
devono aumentare il loro conteggio di riferimento
quindi questo è ciò che vedi lì
il conteggio di riferimento di a ha aumentato il valore
il conteggio di riferimento di B è aumentato ora
immagina che lo faresti
Haskell non avrebbe potuto eseguire a
o qualcosa che improvvisamente, ma saremmo
in un io monad no
guarda questo bel stato mutevole solo
aumentare quei conteggi di riferimento e poi
guarda l’epsilon lì lo ha anche
Stati mutabili perché deve avere
accumulare questi parametri e poi
diminuisce il conteggio dei riferimenti e quindi
quando il conteggio dei riferimenti scende al di sotto di uno
chiamiamo semplicemente la funzione e da quando io
voglio essere un po ‘carino, l’ ho solo tenuto
e ho anche avuto come resettare tutti i mutabili
riportare al suo stato iniziale tale
che quando viene chiamata la funzione
tutto è di nuovo pulito
va bene e guarda quando eseguiamo il nostro programma
è lineare ancora una volta whew ah
quindi non più esponenziale ma le punte
sono indietro non si può avere tutto
giusto così ti ho promesso che lo farei
mantenuto come fare la moltiplicazione così questo
è quando ti arriva come farlo in pieno
come forma ad anello e ora è tutto a coda
ricorsivo tranne che la JVM non lo fa
sostieni la ricorsione di coda quindi se davvero
vuole fare ricorsione di coda si deve
attuare questo utilizzando trampolini ma no
tempo per quello e poi qui sta facendo il
stessa cosa per più parametri se io
voglio prendere la derivata di più
parametri giusti quindi questo è tutto molto
codice semplice come vedi come hai visto e
è proprio come qualsiasi 25 linee di
Scala e poi l’ultima cosa che io
bisogno di fare per attuare il mio completo completo
quadro di apprendimento in meno di cento
linee di codice ho bisogno di definire cosa
pesi sono bene quello che abbiamo detto è quello
stiamo andando ad aggiornare i pesi in base
su questo il derivato che siamo
calcolo bene perché non lo abbiamo solo tenuto
come sai aggiornare i pesi
immediatamente come se prendessimo il
derivato
se siamo sovrappeso, otteniamo il
valore in entrata ha semplicemente moltiplicato il valore
in questo modo è già mostrato un po ‘di più
stati mutabili per rendere le cose ancora più
elegante va bene così è così che abbiamo
un quadro completo di apprendimento profondo in
cento linee di Scala in cui abbiamo usato
solo la matematica del liceo semplice e usiamo
che questo importante trucco da
programmazione funzionale dove noi
rappresentare invece di rappresentare liste
come funzioni rappresentiamo numeri come
funzioni e quindi dovevamo farlo
trucco in cui abbiamo il grosso contro
pontile il gioco è fatto e spero che hai tenuto
come tu sai che tutta la magia dietro
l’apprendimento approfondito è fin dall’inizio
i numeri duali non devono inventarli
la gente l’ha fatto per te 200 anni fa
tu rappresenti i numeri come te
non devi inventare quel computer
scienziati in realtà matematici
inventò quel trucco prima che John lo usasse
è chiamato teorema di Kaylee e questo
funziona per chiunque l’ arte così è anche come
un vecchio trucco e poi usiamo la condivisione
usando il conteggio dei riferimenti così ancora tu
non puoi sapere che non puoi fare cose
efficiente senza stato mutabile e quindi
abbiamo derivato la propagazione di ritorno
tutti qui in questa stanza potrebbero avere
fatto ciò perché il tuo cervello è tutto
più grande del mio cervello di dimensioni di arachidi
è solo assemblando i trucchi giusti così
per favore, vota questa sessione ma
davvero non valuti questa sessione andare e
fatti come sai, vai a casa sul treno
e l’aereo e implementa il tuo
la struttura dell’apprendimento profondo va bene ancora
non è così difficile ed è divertente e ma
come sai che è stato un po ‘ spaventoso
come sai come pensi di te
risolto questo e poi diventa
esponenziale e poi tu ma sono io
pensa come sai che non c’è reale
la magia dietro a questo è tutto elementare
matematica con un bel funzionale
trucchi di programmazione e quindi lo spero
era Scott
lo sai divertente e che puoi vedere
tenuto come sai che è utile
conosci sia un po ‘di matematica che a
un po ‘di programmazione funzionale e
certo un po ‘ di imperativo
programmazione e hai bisogno di tutti e tre voi
non può piacere che tu sappia che non puoi viverti
non è possibile rimuovere uno che devi usare tutto
tre grazie
[Applausi]

Please follow and like us: