La cosa più importante delle reti neurali. Conferenza su Yandex. Intelligenza artificiale nella ricerca. Come Yandex ha imparato a utilizzare le reti neurali per effettuare ricerche in base al significato e non alle parole L'era della ricerca ingenua

Secondo il servizio stampa della società Yandex, utilizzando una rete neurale, è riuscita ad aumentare significativamente la risoluzione e migliorare la qualità dell'immagine di dieci cartoni animati sovietici, tra i più famosi.

Negli ultimi anni gli scienziati hanno creato diverse reti neurali; questa opportunità è diventata loro disponibile grazie all'aumento della potenza di calcolo dei computer e allo sviluppo della matematica. Le reti neurali sono sistemi di intelligenza artificiale in grado di risolvere problemi non banali. Alcune di queste reti neurali complesse possono persino pensare fuori dagli schemi, creando così autonomamente nuove opere d'arte e sviluppando tecnologie innovative.

La rete neurale di Yandex si chiama DeepHD. In precedenza, si era già mostrato bene quando veniva utilizzato per migliorare la qualità dei film che raccontavano la Grande Guerra Patriottica. Quindi sette film sono stati soggetti a modifiche. Ora è la volta dell’animazione sovietica: La regina delle nevi, Il fiore scarlatto, Un gattino di nome Woof, Umka cerca un amico, Thumbelina, ecc.

Uno speciale sistema di intelligenza artificiale si occupa esclusivamente del miglioramento della qualità e non apporta assolutamente modifiche ai fotogrammi dei cartoni animati. Il suo compito è ripristinare i dettagli voluti dall'artista ma andati perduti durante il trasferimento dei cartoni animati dalla pellicola al formato digitale. La pagina in cui è presente la descrizione della rete neurale DeepHD parla delle sue caratteristiche. Ci sono quattro caratteristiche in totale: rimozione di difetti e rumore, conservazione dei dettagli durante l'ingrandimento, lavoro eccellente con flussi video e singole immagini, capacità di lavorare in tempo reale.

La base della tecnologia DeepHD sono le reti neurali generative avversarie. Nella fase iniziale, una rete neurale è impegnata nell'eliminazione dei difetti che compaiono nel video durante la sua compressione. La seconda fase viene eseguita da un'altra rete neurale, responsabile dell'ingrandimento dell'immagine e del mantenimento della chiarezza dei dettagli durante tali cambiamenti. Puoi conoscere il lavoro dettagliato della rete neurale DeepHD sul blog ufficiale dei suoi creatori.

Vale la pena notare che in DeepHD gli spettatori oggi hanno accesso non solo a vecchi film e cartoni animati, ma anche a nuovi lungometraggi e film d'animazione. Puoi trovarli tramite una query di ricerca con l'aggiunta di "DeepHD". Oggi è possibile vedere anche i canali televisivi con una qualità superiore; ciò è reso possibile grazie alla capacità della rete neurale di funzionare in tempo reale.

Ti è piaciuta questa novità? Poi clic.

Yandex ha introdotto un nuovo algoritmo di ricerca basato su reti neurali. Secondo gli esperti, ciò dovrebbe aiutare l'azienda ad aumentare la propria leadership nel mercato russo rispetto al suo principale concorrente, Google

La holding russa Yandex ha introdotto un nuovo algoritmo di ricerca basato su reti neurali. Lo ha annunciato il capo del servizio di pertinenza del servizio, Alexander Safronov. Il nuovo algoritmo, chiamato "Korolyov", effettua la ricerca non solo per parole chiave, ma anche per significato, e fornisce risposte più precise a domande complesse, ha spiegato un rappresentante di Yandex.

Nel 2016 Yandex ha introdotto l'algoritmo Palekh, che confronta in tempo reale il significato di una query rara e unica e il titolo di una pagina web, anche se non hanno parole chiave comuni. Ad esempio, quando si chiede “un dipinto in cui il cielo volteggia”, un motore di ricerca sarà in grado di restituire la “Notte stellata” di Van Gogh. A differenza di Palekh, Korolev è in grado di analizzare l'intera pagina, nonché il significato delle query che portano altri utenti ad essa.

Il capo del dipartimento di ricerca Yandex, Andrei Styskin, ha fornito un altro esempio di richiesta complessa: “un film sullo spazio in cui un padre comunica con sua figlia attraverso le lancette dei secondi”. In questo caso la richiesta non contiene parole chiave, ma l’algoritmo di ricerca è in grado di capire che stiamo parlando del film “Interstellar”, spiega Styskin.

Secondo i rappresentanti del servizio, la rete neurale è in grado di autoapprendere, quindi più utenti cercano nel motore di ricerca, più accurati saranno i risultati. Per i test verrà utilizzata la piattaforma open crowdsourcing Yandex.Toloka, lanciata nel 2014. In sostanza, si tratta di un servizio in cui chiunque può partecipare al test dei prodotti Yandex, assegnare loro valutazioni e lasciare commenti. Ciò consente all'azienda di migliorare i propri servizi e gli utenti ricevono ricompense in denaro per questo. Attualmente, più di 1 milione di utenti sono registrati su Yandex.Toloka.

"Il problema con le reti neurali era che erano molto lente e non potevano essere utilizzate per lavorare con enormi quantità di testo in tempo reale", afferma Igor Ashmanov, fondatore e socio amministratore di Ashmanov and Partners. "Se Yandex fosse davvero in grado di coinvolgere le reti neurali nell'indicizzazione dell'intero volume della Runet, sarebbe interessante, si tratterebbe di un passo avanti piuttosto serio da un punto di vista tecnologico." Resta da analizzare quanto il nuovo algoritmo migliorerà la qualità della ricerca e se la migliorerà in linea di principio, ha osservato Ashmanov.

Il principale concorrente di Yandex, Google, secondo il capo di Ashmanov and Partners, non ha ancora annunciato ufficialmente l'introduzione delle reti neurali nei suoi algoritmi di ricerca. "Google può permettersi di impostare i fattori di ranking in modo diverso e di sperimentare più a lungo in questo settore senza introdurre nuove tecnologie nella ricerca, semplicemente perché l'azienda dispone di più programmatori e risorse", ha osservato l'esperto.​


Recuperare e sorpassare

Secondo l’analista di VTB Capital Vladimir Bespalov, la nuova versione del motore di ricerca russo è un passo avanti per mantenere la quota di mercato di Yandex. "L'applicazione mobile Search aggiornata, il nuovo algoritmo del motore di ricerca: tutto ciò dovrebbe aiutare Yandex a stabilizzare e aumentare la sua quota nel mercato della ricerca", afferma l'esperto. — L'effetto non si avvertirà immediatamente, ma una diminuzione delle query di ricerca a lungo termine potrebbe avere un impatto meno favorevole sulle prestazioni future. La ricerca è il prodotto principale di Yandex; le entrate principali dell’azienda sono la pubblicità, che è legata alla ricerca”.

La decisione del FAS può aiutare Yandex a mantenere la sua posizione nella ricerca mobile, ricorda Bespalov. Nell’aprile di quest’anno, il dipartimento ha stipulato un accordo transattivo con il principale concorrente dell’azienda russa nel mercato della ricerca, Google. Secondo esso, il colosso americano di Internet riconsidererà gli accordi con i produttori di smartphone Android in Russia e permetterà agli utenti di scegliere sui propri dispositivi servizi di ricerca alternativi di Google come principali.

Alla fine del secondo trimestre di quest’anno, la quota di Yandex nel mercato della ricerca in Russia ammontava al 54,3%, come riportato da Yandex N.V. (la società madre di Yandex) nella sua relazione finanziaria con riferimento al proprio servizio di analisi Yandex.Radar. Al 31 luglio, secondo Yandex.Radar, Google occupava il 40,36% dei motori di ricerca in Russia. Secondo LiveInternet, nella media degli ultimi tre mesi tra i motori di ricerca Yandex era in testa con una quota del 51,1%, Google con il 43,9%. Yandex N.V. non rivela i ricavi derivanti dalla ricerca, ma la direzione “ricerca e portale” ha portato alla società 20,135 miliardi di rubli, ovvero il 22% in più rispetto allo stesso periodo del 2016.

“La precedente versione rivoluzionaria della ricerca Matrixnet ha permesso a Yandex di staccarsi da Google e aumentare la sua quota di quasi 10 punti percentuali. Per mezzo anno. Questo è un chiaro esempio di come l’uso di tecnologie innovative porti a evidenti risultati commerciali anche in un mercato così complesso come quello della ricerca”, afferma Alexander Laryanovsky, socio amministratore della scuola online Skyeng ed ex direttore dello sviluppo internazionale di Yandex.

Secondo Tatyana Danielyan, vicedirettore per la ricerca e lo sviluppo del gruppo di società ABBYY, l'introduzione di nuovi algoritmi di ricerca potrebbe anche modificare la classifica (l'ordine in cui i siti vengono visualizzati nei risultati di ricerca). Tuttavia, questo sarà un vantaggio per i siti stessi, afferma: "Gli utenti avranno maggiori probabilità di visitare pagine che soddisfano effettivamente le loro esigenze e le conversioni del sito possono aumentare in modo significativo".

Dopo aver ricevuto un'altra "lettera di felicità", il proprietario di un'auto moderna cerca sempre di studiare a fondo la fotografia in bianco e nero e di ricordare in grande dettaglio il palo su cui era appesa la macchina fotografica successiva. Tuttavia, non è sempre possibile evitare nuove multe. Allora quali forze e mezzi sono al servizio del “grande fratello”, come calcolarli e adottare rapidamente le misure necessarie per non ricevere un'altra multa? L'Izvestia ha scoperto come nasce una decisione in merito a un'infrazione, quali tipi di sistemi di foto-videoregistrazione esistono e ha anche cercato di capire cosa fare se viene emessa una multa per errore.

Il loro nome è legione

Ad oggi a Mosca sono state installate circa 167mila telecamere, di cui quasi 2mila sistemi per la registrazione automatica delle violazioni del codice stradale monitorano la situazione del traffico, e il loro numero è in costante crescita. Attualmente, 1,5mila fissi, più di 30 mobili, quasi 400 mobili e altri 110 complessi installati sui trasporti pubblici terrestri aiutano a multare i trasgressori. Indubbiamente, il lavoro per migliorare la situazione della sicurezza stradale viene portato avanti su larga scala: solo nel 2017 sono state rilevate più di 83 milioni di infrazioni utilizzando dispositivi di registrazione di foto e video (un anno prima - poco più di 60 milioni), tuttavia Accade spesso che i sistemi automatici falliscano e subiscano conseguenze negative di cui sono innocenti gli automobilisti.

I primi sistemi fissi di registrazione foto-video delle violazioni del codice della strada sono apparsi sulle autostrade in uscita dalla capitale già nel 2006-2007 nell'ambito del programma federale "Migliorare la sicurezza stradale nel 2006-2010". Poiché da allora la situazione sulle strade è notevolmente migliorata, le telecamere del traffico continueranno ad essere installate.

I sistemi moderni non solo possono rilevare l'eccesso di velocità, la guida sul lato della strada o l'ingresso nelle corsie dei trasporti pubblici, ma anche identificare i trasgressori che si muovono in città senza assicurazione automobilistica obbligatoria, si fermano o parcheggiano in aree dove è difficile guidare senza la propria auto, o in luoghi in cui le persone disabili trascurano i requisiti della segnaletica stradale, ecc. Più recentemente, nella capitale sono apparse telecamere del traffico che monitorano la linea di arresto. E già nel 2019, l'Ente pubblico statale “Centro di organizzazione del traffico” (TsODD) installerà 200 sistemi per monitorare la sicurezza degli utenti della strada più vulnerabili: le telecamere saranno puntate sui conducenti che non consentono il passaggio dei pedoni alle strisce pedonali. Ricordiamo che la multa per tale reato ai sensi dell'articolo 12.18 del Codice dei reati amministrativi varia da 1,5 mila a 2,5 mila rubli.

La comparsa di una multa completamente nuova per gli automobilisti è proprio dietro l'angolo: lo ha annunciato il 12 novembre il capo della polizia stradale, Mikhail Chernikov. L'ispettorato intende imporre sanzioni per la guida pericolosa. Molto probabilmente ai sistemi di registrazione di foto e video verrà affidato anche il compito di monitorare i comportamenti sconsiderati e prendere decisioni per gli appassionati del gioco della dama.

Sparato alla schiena

Nell’ambito del concetto di trasformazione di Mosca in una “città intelligente”, dal 2011 la capitale implementa attivamente un sistema di trasporto intelligente (ITS), che raccoglie e analizza informazioni sul carico e sulle condizioni della rete stradale. Le “mani e gli occhi” degli ITS sono telecamere stradali e altri software e hardware che garantiscono la raccolta, l'elaborazione, l'archiviazione dei dati e il loro aggiornamento.

In Russia vengono utilizzati tre tipi di sistemi: radar, laser e registrazione video. Possono essere sia fissi che mobili. I sistemi radar possono essere distinti dal loro aspetto (hanno due "occhi" - per il sensore radar e per l'obiettivo della fotocamera) e dalla registrazione video installando più telecamere su un'asta (una per ciascuna striscia).

In media, la distanza focale alla quale la telecamera “cattura” un intruso varia da 50 m a 500 m. Ma la soglia per la velocità massima che può essere registrata dal dispositivo è stata notevolmente aumentata: la portata dei sistemi moderni è 0–. 250 km/h e non 0–180 km/h come prima.

I sistemi moderni hanno imparato a riconoscere anche le targhe sporche o deformate e sono diventati meno propensi a commettere errori. Ad esempio, l'errore dei popolari complessi Avtouragan di Mosca, a seconda della velocità del veicolo, è di soli 1-2 km/h, mentre le varie modifiche del complesso Strelka non superano i 2 km/h. Questi ultimi, tra l'altro, sono dotati di uno speciale "custode" - un dispositivo in grado di pulire autonomamente l'occhio della fotocamera se vi si deposita dello sporco.

Inoltre, ora il dispositivo non solo può fotografare l'auto dalla parte anteriore, ma anche rilevare la velocità con cui l'oggetto si allontana dalla telecamera, tracciare la traiettoria del movimento, misurare la velocità media del veicolo in una determinata area, o addirittura operare secondo il principio del “pit stop”. In quest'ultimo caso i dati del trasgressore verranno trasferiti all'equipaggio di polizia stradale più vicino in servizio con richiesta di fermo.

Da settembre 2018 è stata lanciata in modalità test a Mosca una rete neurale, che si interfaccia con il database del Ministero degli Affari Interni, che memorizza le informazioni su tutte le auto immatricolate. La cosiddetta maschera del veicolo è archiviata in pubblico dominio e contiene dati sulla marca e il modello dell'auto, il colore della carrozzeria e il numero di targa.

Secondo il capo del dipartimento dei trasporti della capitale, Maxim Liksutov, l’introduzione di una rete neurale in città consentirà di individuare casi di frode, ovvero sostituzione di targhe o furto di un veicolo. Il sistema è in grado di rilevare automaticamente una discrepanza tra l'auto e le targhe installate su di essa e segnalare ad un agente di polizia che l'auto necessita di un controllo.

Come evitare di essere ripresi dalla telecamera?

Prima di tutto, per evitare di ricevere una multa, bisogna ovviamente non violare: rispettare le regole della strada, osservare il limite di velocità, seguire la segnaletica e la segnaletica orizzontale sull'asfalto. Inoltre, puoi proteggerti ulteriormente con l'aiuto di un rilevatore radar o di un videoregistratore con rilevatore radar: questi dispositivi monitorano la situazione in tempo reale, ricevendo segnali dalle telecamere della polizia stradale e avvisano il conducente con un segnale audio.

Nei mercati dei dispositivi basati su Android o Apple esiste un gran numero di applicazioni con funzionalità simili. Il prezzo di tali applicazioni, a seconda delle loro capacità e precisione, varia da 100 a 1650 rubli. Oppure puoi utilizzare un navigatore gratuito, avendo precedentemente attivato nelle impostazioni la funzione di notifica sonora sugli autovelox e altri eventi stradali. Tuttavia, vale la pena considerare che i dati, ad esempio, sulle nuove telecamere o sui posti mobili della polizia stradale, vengono inseriti lì dai tuoi stessi utenti.

Come dimostrare che hai ragione?

È possibile e necessario contestare le multe erroneamente emesse per violazioni del codice della strada registrate dalle telecamere. Tuttavia, ciò dovrebbe essere fatto solo se sei assolutamente sicuro di non aver violato la normativa e puoi supportarlo con prove significative.

Il meccanismo per impugnare le decisioni è il seguente:

Hai 10 giorni di tempo per presentare un reclamo dal momento in cui ricevi la multa (articolo 30.3 del Codice amministrativo);

Il reclamo può essere presentato di persona (ai centri servizi dei trasporti di Mosca o alla reception MADI) o elettronicamente (tramite il portale Autocode o la reception elettronica del governo di Mosca);

L'insieme dei documenti deve contenere sia il reclamo stesso, firmato di proprio pugno, sia materiali aggiuntivi (foto, video o altri documenti) che confermino le informazioni contenute nel ricorso;

Se al momento della presentazione della denuncia sono già trascorsi i 10 giorni previsti dal Codice degli illeciti amministrativi, al pacchetto atti deve essere allegata un'istanza volta a ripristinare il mancato termine per impugnare la decisione sull'illecito amministrativo, che deve anche essere firmato personalmente;

La denuncia deve indicare il nome dell'ente a cui è presentata, la data, il numero della decisione e gli argomenti comprovanti l'illegittimità dell'accusa. Istruzioni più dettagliate con esempi di testi di reclamo sono pubblicate sul sito ufficiale del sindaco di Mosca.

Sono previsti 10 giorni per l'esame del reclamo, quindi è comunque necessario pagare la multa, anche se è stata emessa erroneamente. Vale anche la pena prepararsi al fatto che la decisione dovrà essere impugnata dalle autorità superiori, prima presso la polizia stradale e poi in tribunale. E stabilisci come regola quella di conservare le riprese della dash cam dopo il viaggio per almeno un paio di settimane.

Oggi abbiamo annunciato un nuovo algoritmo di ricerca “Palekh”. Include tutti i miglioramenti su cui abbiamo lavorato ultimamente.

Ad esempio, la ricerca ora utilizza per la prima volta le reti neurali per trovare i documenti non in base alle parole utilizzate nella query e nel documento stesso, ma in base al significato della query e al titolo.

Per molti decenni, i ricercatori sono stati alle prese con il problema della ricerca semantica, in cui i documenti vengono classificati in base alla rilevanza semantica per una query. E ora sta diventando realtà.

In questo post cercherò di parlare un po’ di come lo abbiamo fatto e del perché questo non è solo un altro algoritmo di machine learning, ma un passo importante verso il futuro.

Intelligenza artificiale o machine learning?

Quasi tutti sanno che i moderni motori di ricerca funzionano utilizzando l’apprendimento automatico. Perché dovremmo parlare separatamente dell'uso delle reti neurali per i suoi compiti? E perché solo ora, dal momento che l'hype su questo argomento non si è placato da diversi anni? Proverò a raccontarti la storia del problema.

La ricerca su Internet è un sistema complesso apparso molto tempo fa. All'inizio era solo una ricerca di pagine, poi si è trasformata in un risolutore di problemi e ora sta diventando un assistente a tutti gli effetti. Più grande è Internet e più persone ci sono, più elevate sono le loro esigenze, più difficile deve diventare la ricerca.

L'era della ricerca ingenua

All'inizio c'era solo una ricerca per parole: un indice invertito. Quindi c'erano troppe pagine e dovevano essere classificate. Cominciarono a essere prese in considerazione varie complicazioni: frequenza delle parole, tf-idf.

L'era dei collegamenti

Poi c'erano troppe pagine su qualsiasi argomento, si è verificata una svolta importante: i collegamenti hanno iniziato a essere presi in considerazione, è apparso PageRank.

L’era dell’apprendimento automatico

Internet divenne importante dal punto di vista commerciale e molti truffatori emersero cercando di ingannare i semplici algoritmi esistenti all'epoca. Si è verificata una seconda importante svolta: i motori di ricerca hanno iniziato a utilizzare la loro conoscenza del comportamento degli utenti per capire quali pagine sono buone e quali no.

A un certo punto, in questa fase, la mente umana non era più sufficiente per capire come classificare i documenti. Si è verificata la transizione successiva: i motori di ricerca hanno iniziato a utilizzare attivamente l'apprendimento automatico.

Uno dei migliori algoritmi di apprendimento automatico è stato inventato in Yandex: Matrixnet. Possiamo dire che il ranking è aiutato dall’intelligenza collettiva degli utenti e dalla “saggezza della folla”. Le informazioni sui siti e sul comportamento delle persone vengono convertite in molti fattori, ognuno dei quali viene utilizzato da Matrixnet per costruire una formula di classificazione. In effetti, la formula della classifica è scritta da una macchina (risultò essere di circa 300 megabyte).

Ma il machine learning “classico” ha un limite: funziona solo dove ci sono molti dati. Un piccolo esempio. Milioni di utenti inseriscono la query [VKontakte] per trovare lo stesso sito. In questo caso, il loro comportamento è un segnale così forte che la ricerca non costringe le persone a guardare i risultati, ma richiede immediatamente l'indirizzo quando si inserisce la query.

Ma le persone sono più complesse e vogliono sempre di più dalla loro ricerca. Ormai fino al 40% di tutte le richieste sono uniche, cioè non si ripetono almeno due volte durante l'intero periodo di osservazione. Ciò significa che la ricerca non dispone di dati sufficienti sul comportamento degli utenti e Matrixnet è priva di fattori preziosi. Tali query in Yandex sono chiamate "coda lunga", poiché insieme costituiscono una percentuale significativa dei risultati della nostra ricerca.

L'era dell'intelligenza artificiale

E ora è il momento di parlare dell’ultima svolta: alcuni anni fa, i computer sono diventati abbastanza veloci e c’erano abbastanza dati per utilizzare le reti neurali. Le tecnologie basate su di esse sono anche chiamate intelligenza artificiale o intelligenza artificiale, perché le reti neurali sono costruite a immagine dei neuroni nel nostro cervello e cercano di emulare il lavoro di alcune delle sue parti.

L’intelligenza artificiale è molto migliore dei metodi più vecchi nei compiti che gli esseri umani possono svolgere, come il riconoscimento vocale o il riconoscimento di schemi nelle immagini. Ma in che modo questo aiuta la ricerca?

Di norma, le query uniche e a bassa frequenza sono piuttosto difficili da cercare ed è molto più difficile trovare una buona risposta per loro. Come farlo? Non abbiamo suggerimenti da parte degli utenti (quale documento è migliore e quale è peggiore), quindi per risolvere il problema della ricerca dobbiamo imparare a comprendere meglio la corrispondenza semantica tra due testi: la query e il documento.

È facile a dirsi

A rigor di termini, le reti neurali artificiali sono uno dei metodi di apprendimento automatico. Più recentemente, a loro è stata dedicata una conferenza nell'ambito dello Small ShAD. Le reti neurali mostrano risultati impressionanti nel campo dell'analisi delle informazioni naturali: suoni e immagini. Questo accade ormai da diversi anni. Ma perché non sono stati ancora utilizzati così attivamente nelle ricerche?

La risposta è semplice: parlare di significato è molto più difficile che parlare di un'immagine in un quadro o di come trasformare i suoni in parole decodificate. Tuttavia, nella ricerca di significato, l'intelligenza artificiale ha davvero cominciato a provenire dall'area in cui è stata a lungo re: la ricerca per immagini.

Qualche parola su come funziona nella ricerca di immagini. Prendi un'immagine e usi le reti neurali per trasformarla in un vettore nello spazio N-dimensionale. Prendi la richiesta (che può essere sotto forma di testo o sotto forma di un'altra immagine) e fai lo stesso con essa. E poi confronti questi vettori. Più sono vicini tra loro, più l'immagine corrisponde alla richiesta.

Ok, se funziona con le immagini, perché non applicare la stessa logica alla ricerca sul web?

Il diavolo è nella tecnologia

Formuliamo il problema come segue. Abbiamo una richiesta dell'utente e un titolo di pagina in input. Devi capire come corrispondono tra loro nel significato. Per fare ciò, è necessario rappresentare il testo della richiesta e il testo del titolo sotto forma di tali vettori, la cui moltiplicazione scalare sarebbe tanto maggiore quanto più rilevante è il documento con il titolo dato rispetto alla richiesta. In altre parole, vogliamo addestrare una rete neurale in modo tale che per testi con significato vicino generi vettori simili, ma per query e intestazioni semanticamente non correlate i vettori dovrebbero essere diversi.

La complessità di questo compito risiede nella scelta dell'architettura e del metodo corretti per l'addestramento della rete neurale. Numerosi approcci per risolvere il problema sono noti dalle pubblicazioni scientifiche. Probabilmente il metodo più semplice in questo caso è rappresentare i testi come vettori utilizzando l'algoritmo word2vec (sfortunatamente, l'esperienza pratica suggerisce che questa è una soluzione piuttosto inadeguata per il problema in questione).

DSSM

Nel 2013, i ricercatori di Microsoft Research hanno descritto il loro approccio, chiamato Deep Structured Semantic Model.

L'input del modello sono i testi delle query e delle intestazioni. Per ridurre le dimensioni del modello, su di essi viene eseguita un'operazione, che gli autori chiamano word hashing. Al testo vengono aggiunti indicatori di inizio e fine, dopodiché viene diviso in trigrammi di lettere. Ad esempio, per la query [palekh] otterremo i trigrammi [pa, ale, lekh, ex]. Poiché il numero di trigrammi diversi è limitato, possiamo rappresentare il testo della richiesta come un vettore di diverse decine di migliaia di elementi di dimensione (la dimensione del nostro alfabeto alla terza potenza). Gli elementi del vettore corrispondenti ai trigrammi della richiesta saranno uguali a 1, il resto a 0. In sostanza, contrassegniamo così l'ingresso dei trigrammi dal testo in un dizionario composto da tutti i trigrammi conosciuti. Se confronti tali vettori, puoi solo scoprire la presenza di trigrammi identici nella richiesta e nell'intestazione, il che non è di particolare interesse. Pertanto, ora devono essere convertiti in altri vettori, che avranno già le proprietà di prossimità semantica di cui abbiamo bisogno.

Dopo lo strato di input, come previsto nelle architetture profonde, ci sono diversi strati nascosti sia per la richiesta che per l'intestazione. L'ultimo livello ha una dimensione di 128 elementi e funge da vettore utilizzato per il confronto. L'output del modello è il risultato della moltiplicazione scalare dell'ultimo vettore di intestazione e di richiesta (per essere precisi, viene calcolato il coseno dell'angolo tra i vettori). Il modello viene addestrato in modo tale che il valore di output sia grande per gli esempi di addestramento positivi e piccolo per quelli negativi. In altre parole, confrontando i vettori dell'ultimo strato, possiamo calcolare l'errore di previsione e modificare il modello in modo che l'errore diminuisca.

Noi di Yandex stiamo anche ricercando attivamente modelli basati su reti neurali artificiali, quindi ci siamo interessati al modello DSSM. Successivamente parleremo dei nostri esperimenti in questo settore.

Teoria e pratica

Una proprietà caratteristica degli algoritmi descritti nella letteratura scientifica è che non sempre funzionano fuori dagli schemi. Il fatto è che un ricercatore “accademico” e un ricercatore industriale si trovano in condizioni significativamente diverse. Il punto di partenza (baseline) con cui l'autore di una pubblicazione scientifica confronta la sua soluzione dovrebbe essere un algoritmo ben noto: ciò garantisce la riproducibilità dei risultati. I ricercatori prendono i risultati di un approccio pubblicato in precedenza e mostrano come possono essere superati. Ad esempio, gli autori del DSSM originale confrontano il loro modello utilizzando la metrica NDCG con gli algoritmi BM25 e LSA. Nel caso di un ricercatore applicato che studia la qualità della ricerca in un motore di ricerca reale, il punto di partenza non è un algoritmo specifico, ma l'intera classifica nel suo insieme. L'obiettivo dello sviluppatore Yandex non è superare BM25, ma ottenere miglioramenti sullo sfondo dell'intero insieme di fattori e modelli precedentemente introdotti. Pertanto, il livello di base per un ricercatore in Yandex è estremamente elevato e molti algoritmi che presentano novità scientifiche e mostrano buoni risultati con un approccio "accademico" si rivelano inutili nella pratica, poiché non migliorano realmente la qualità della ricerca.

Nel caso di DSSM, abbiamo riscontrato lo stesso problema. Come spesso accade, in condizioni di “combattimento” l'esatta implementazione del modello dell'articolo ha mostrato risultati piuttosto modesti. Sono state necessarie alcune significative “modifiche ai file” prima di poter ottenere risultati interessanti dal punto di vista pratico. Qui parleremo delle principali modifiche apportate al modello originale che ci hanno permesso di renderlo più potente.

Ampio livello di input

Nel modello DSSM originale, il livello di input è un insieme di trigrammi di lettere. La sua dimensione è 30.000. L'approccio del trigramma presenta numerosi vantaggi. In primo luogo, ce ne sono relativamente pochi, quindi lavorare con loro non richiede grandi risorse. In secondo luogo, il loro utilizzo facilita l’identificazione di errori di battitura e parole errate. Tuttavia, i nostri esperimenti hanno dimostrato che rappresentare i testi come un “sacchetto” di trigrammi riduce notevolmente la potenza espressiva della rete. Pertanto, abbiamo aumentato radicalmente la dimensione del livello di input, includendo, oltre ai trigrammi delle lettere, circa 2 milioni di parole e frasi in più. Pertanto, rappresentiamo i testi delle query e delle intestazioni come un “sacchetto” congiunto di parole, bigrammi di parole e trigrammi di lettere.

L'utilizzo di un livello di input di grandi dimensioni comporta un aumento delle dimensioni del modello e dei tempi di addestramento e richiede risorse di elaborazione significativamente maggiori.

Difficile da imparare: come una rete neurale ha combattuto con se stessa e ha imparato dai propri errori

La formazione del DSSM originale consiste nell'esporre la rete a un gran numero di esempi positivi e negativi. Questi esempi sono presi dai risultati di ricerca (a quanto pare per questo è stato utilizzato il motore di ricerca Bing). Esempi positivi sono i titoli dei documenti di ricerca cliccati, esempi negativi sono i titoli dei documenti che non sono stati cliccati. Questo approccio presenta alcuni svantaggi. Il fatto è che l'assenza di un clic non sempre indica che il documento sia irrilevante. È vera anche l'affermazione opposta: la presenza di un clic non garantisce la pertinenza del documento. In sostanza, imparando nel modo descritto nell’articolo originale, ci sforziamo di prevedere l’attrattiva dei titoli, a condizione che siano presenti nei risultati di ricerca. Anche questo, ovviamente, non è male, ma ha una relazione piuttosto indiretta con il nostro obiettivo principale: imparare a comprendere la prossimità semantica.

Durante i nostri esperimenti, abbiamo scoperto che il risultato potrebbe essere significativamente migliorato se utilizzassimo una strategia diversa per selezionare gli esempi negativi. Per raggiungere il nostro obiettivo, buoni esempi negativi sono quei documenti che sono garantiti irrilevanti per la query, ma che allo stesso tempo aiutano la rete neurale a comprendere meglio il significato delle parole. Da dove posso prenderli?

Primo tentativo

Per prima cosa, prendiamo come esempio negativo il titolo di un documento a caso. Ad esempio, per la richiesta [dipinto Palekh], un titolo casuale potrebbe essere “Regole della strada 2016 della Federazione Russa”. Naturalmente, è impossibile escludere completamente la possibilità che un documento selezionato a caso tra miliardi sia rilevante per la richiesta, ma la probabilità che ciò accada è così piccola che può essere trascurata. In questo modo possiamo facilmente ottenere un gran numero di esempi negativi. Sembrerebbe che ora possiamo insegnare alla nostra rete esattamente ciò che vogliamo: distinguere i buoni documenti che interessano gli utenti dai documenti che non hanno nulla a che fare con la richiesta. Sfortunatamente, il modello basato su tali esempi si è rivelato piuttosto debole. Una rete neurale è una cosa intelligente e troverà sempre un modo per semplificare il suo lavoro. In questo caso, ha semplicemente iniziato a cercare le stesse parole nelle query e nei titoli: sì, una buona coppia, no, una cattiva. Ma possiamo farlo da soli. Per noi è importante che la rete impari a distinguere modelli non ovvi.

Un altro tentativo

L'esperimento successivo consisteva nell'aggiungere le parole della query ai titoli degli esempi negativi. Ad esempio, per la richiesta [dipinto Palekh] il titolo casuale sembrava [dipinto del Regolamento della strada 2016 della Federazione Russa]. La rete neurale ha avuto qualche difficoltà in più, ma ha comunque imparato rapidamente a distinguere bene le coppie naturali da quelle compilate manualmente. È diventato chiaro che non avremmo raggiunto il successo utilizzando tali metodi.

Successo

Molte soluzioni ovvie diventano ovvie solo dopo essere state scoperte. È successo anche questa volta: dopo qualche tempo si è scoperto che il modo migliore per generare esempi negativi è costringere la rete a “lottare” contro se stessa, per imparare dai propri errori. Tra centinaia di titoli casuali, abbiamo scelto quello che l'attuale rete neurale considera il migliore. Ma poiché questa intestazione è ancora casuale, è molto probabile che non corrisponda alla richiesta. E sono proprio questi titoli che abbiamo cominciato a usare come esempi negativi. In altre parole, puoi mostrare alla rete le migliori intestazioni casuali, addestrarla, trovare nuove migliori intestazioni casuali, mostrare di nuovo la rete e così via. Ripetendo questa procedura più e più volte, abbiamo visto come la qualità del modello è notevolmente migliorata, e sempre più spesso la migliore delle coppie casuali è diventata simile a veri esempi positivi. Il problema è stato risolto.

Uno schema di formazione simile nella letteratura scientifica è solitamente chiamato hard negative mining. È inoltre opportuno notare che nella comunità scientifica si sono diffuse soluzioni simili per la generazione di immagini dall'aspetto realistico, questa classe di modelli è denominata Generative Adversarial Networks;

Obiettivi diversi

I ricercatori di Microsoft Research hanno utilizzato i clic sui documenti come esempi positivi. Tuttavia, come già accennato, si tratta di un segnale piuttosto inaffidabile sulla corrispondenza semantica dell'intestazione con la richiesta. Alla fine, il nostro obiettivo non è classificare i siti più visitati nei risultati di ricerca, ma trovare informazioni veramente utili. Pertanto, abbiamo provato a utilizzare altre caratteristiche del comportamento dell'utente come obiettivo della formazione. Ad esempio, uno dei modelli prevedeva se un utente sarebbe rimasto sul sito o se ne sarebbe andato. Un altro è quanto tempo rimarrà sul sito. A quanto pare, puoi migliorare significativamente i risultati se ottimizzi una metrica target di questo tipo, che indica che l'utente ha trovato ciò di cui aveva bisogno.

Profitto

Ok, cosa ci dà questo in pratica? Confrontiamo il comportamento del nostro modello neurale e un semplice fattore di testo basato sulla corrispondenza tra parole interrogate e testo - BM25. Ci è venuto da quei tempi in cui la classifica era semplice, e ora è conveniente usarla come livello base.

Prendiamo come esempio la query [Libro di Kells] e vediamo quale significato assumono i fattori nelle diverse intestazioni. Per controllarlo, aggiungiamo un risultato chiaramente irrilevante all'elenco delle intestazioni.

Tutti i fattori in Yandex sono normalizzati all'intervallo. Si prevede che BM25 abbia valori elevati per i titoli che contengono parole di query. Ed è abbastanza prevedibile che questo fattore riceva un valore pari a zero su titoli che non hanno parole in comune con la richiesta. Ora notiamo come si comporta il modello neurale. Riconosce altrettanto bene la connessione tra una richiesta sia con il titolo russo di una pagina Wikipedia pertinente sia con il titolo di un articolo in inglese! Inoltre, sembra che il modello abbia “visto” la connessione tra la query e il titolo, che non menziona il Libro di Kells, ma contiene una frase simile (“Vangeli irlandesi”). Il valore del modello per un titolo irrilevante è significativamente inferiore.

Vediamo ora come si comporteranno i nostri fattori se riformuliamo la richiesta senza cambiarne il significato: [vangelo di Kells].

Per BM25, la riformulazione della domanda si è trasformata in un vero disastro: il fattore è diventato zero sui titoli pertinenti. E il nostro modello dimostra un’eccellente resistenza alla riformulazione: i titoli rilevanti hanno ancora un valore fattoriale elevato, mentre un titolo irrilevante ha ancora un valore fattoriale basso. Sembra che questo sia esattamente il comportamento che ci aspettavamo da un oggetto che afferma di poter “comprendere” la semantica di un testo.

Un altro esempio. Richiesta [una storia in cui una farfalla veniva schiacciata].

Come possiamo vedere, il modello neurale è stato in grado di valutare altamente il titolo con la risposta corretta, nonostante la completa assenza di parole comuni con la query. Inoltre è chiaramente visibile che i titoli che non rispondono alla domanda, ma hanno comunque un significato correlato, ricevono un valore fattore piuttosto elevato. È come se il nostro modello “leggesse” la storia di Bradbury e “sapesse” che è proprio di questo che sta parlando nella richiesta!

Qual è il prossimo?

Siamo all’inizio di un viaggio lungo e molto interessante. A quanto pare, le reti neurali hanno un grande potenziale per migliorare il posizionamento. Le principali aree che necessitano di uno sviluppo attivo sono già chiare.

Ad esempio, è ovvio che il titolo contiene informazioni incomplete sul documento e sarebbe utile imparare a costruire un modello utilizzando il testo completo (come si è scoperto, questo non è un compito del tutto banale). Inoltre, possiamo immaginare modelli che abbiano un'architettura significativamente più complessa rispetto al DSSM: c'è motivo di credere che in questo modo saremo in grado di gestire meglio alcuni costrutti del linguaggio naturale. Consideriamo il nostro obiettivo a lungo termine la creazione di modelli in grado di “comprendere” la corrispondenza semantica tra query e documenti a un livello paragonabile a quello di un essere umano. Ci saranno molte difficoltà sulla strada verso questo obiettivo: più interessante sarà superarlo. Promettiamo di parlare del nostro lavoro in questo settore. Segui le prossime pubblicazioni.

Il materiale raccontato dal nostro collega Konstantin Lakhman riassume la storia dello sviluppo delle reti neurali, le loro caratteristiche principali e le differenze fondamentali rispetto ad altri modelli utilizzati nell'apprendimento automatico. Parleremo anche di esempi specifici di utilizzo delle tecnologie delle reti neurali e delle loro prospettive immediate. La lezione sarà utile per coloro che vogliono sistematizzare nella propria testa tutte le più importanti conoscenze moderne sulle reti neurali.

Konstantin klakhman Lakhman si è laureato alla MEPhI, ha lavorato come ricercatore nel dipartimento di neuroscienze del Centro nazionale di ricerca “Kurchatov Institute”. Presso Yandex lavora sulle tecnologie di rete neurale utilizzate nella visione artificiale.

Sotto il taglio c'è una trascrizione dettagliata con diapositive.

Reti neurali

Ciao a tutti. Mi chiamo Kostya Lakhman e l'argomento della conferenza di oggi è "Reti neurali". Lavoro presso Yandex nel gruppo delle tecnologie di rete neurale e sviluppiamo ogni sorta di cose interessanti basate sull'apprendimento automatico utilizzando le reti neurali. Le reti neurali sono uno dei metodi di apprendimento automatico che attira ormai molta attenzione non solo da specialisti nel campo dell'analisi dei dati o matematici, ma anche da persone in generale che non hanno nulla a che fare con questa professione. E questo è dovuto al fatto che le soluzioni basate sulle reti neurali mostrano i migliori risultati in vari ambiti della conoscenza umana, come il riconoscimento vocale, l'analisi del testo, l'analisi delle immagini, di cui cercherò di parlare in questa conferenza. Capisco che probabilmente tutti in questo pubblico e quelli che ci ascoltano hanno livelli di preparazione leggermente diversi - alcuni sanno un po' di più, altri un po' meno - ma puoi alzare la mano se hai letto qualcosa sulle reti neurali? Questa è una parte molto solida del pubblico. Cercherò di renderlo interessante sia per chi non ha sentito nulla, sia per chi ha letto qualcosa, perché la maggior parte degli studi di cui parlerò sono studi di quest'anno o dell'anno precedente, perché ce ne sono così tanti succede molte cose e passano letteralmente sei mesi, e quegli articoli pubblicati sei mesi fa sono già un po 'obsoleti.


Iniziamo. Ti dirò solo molto rapidamente qual è la sfida dell'apprendimento automatico in generale. Sono sicuro che molti di voi lo sanno, ma per andare avanti vorrei che tutti lo capissero. Usando l'esempio del problema di classificazione come il più comprensibile e semplice.

Prendiamo una U, un insieme di oggetti nel mondo reale, e a ciascuno di questi oggetti attribuiamo alcune caratteristiche di questi oggetti. Inoltre, ciascuno di questi oggetti ha un tipo di classe che vorremmo essere in grado di prevedere, date le caratteristiche dell'oggetto. Diamo un'occhiata a questa situazione usando le immagini come esempio.


Gli oggetti sono tutte le immagini del mondo che potrebbero interessarci.


Le caratteristiche più semplici delle immagini sono i pixel. Nell'ultimo mezzo secolo, durante il quale l'umanità è stata impegnata nel riconoscimento delle immagini, sono state inventate caratteristiche delle immagini molto più complesse, ma queste sono le più semplici.


E la classe che possiamo assegnare a ciascuna immagine è, ad esempio, una persona (questa è una fotografia di Alan Turing, per esempio), un uccello, una casa e così via.


Il compito dell'apprendimento automatico in questo caso è costruire una funzione decisionale che, in base al vettore delle caratteristiche di un oggetto, dirà a quale classe appartiene. Per quanto ne so, hai assistito a una conferenza di Konstantin Vorontsov, che ha parlato di tutto questo in modo molto più approfondito di me, quindi mi limiterò a coprire solo l'inizio.


Nella maggior parte dei casi è necessario un cosiddetto set di formazione. Questo è un insieme di esempi di cui sappiamo per certo che questo oggetto ha una classe del genere. E sulla base di questo campione di addestramento, possiamo costruire questa funzione decisionale, che commette il minor errore possibile sugli oggetti del training set e, quindi, calcola che sugli oggetti che non sono inclusi nel training set, avremo anche un buona qualità delle classificazioni.


Per fare ciò dobbiamo introdurre qualche funzione di errore. Qui D è l'insieme di addestramento, F è la funzione decisionale. E nel caso più semplice, la funzione di errore è semplicemente il numero di esempi in cui commettiamo errori. E, per trovare la funzione decisionale ottimale, dobbiamo capire. Di solito selezioniamo una funzione da una sorta di insieme parametrico, cioè è solo una sorta di polinomio di un'equazione che ha alcuni coefficienti e dobbiamo in qualche modo selezionarli. E i parametri di questa funzione che minimizzano questa funzione di errore, la funzione di perdita, sono il nostro obiettivo, cioè vogliamo trovare questi parametri.

Esistono molti metodi su come cercare questi parametri. Non entrerò in questo adesso. Un metodo è quello in cui prendiamo un esempio di questa funzione, vediamo se l'abbiamo classificata correttamente o in modo errato e prendiamo la derivata rispetto ai parametri della nostra funzione. Come sai, se andiamo verso l'inverso di questa derivata, ridurremo così l'errore in questo esempio. E così, esaminando tutti gli esempi, ridurremo l'errore regolando i parametri della funzione.

Ciò di cui ho appena parlato vale per tutti gli algoritmi di machine learning e nella stessa misura vale per le reti neurali, anche se le reti neurali si sono sempre differenziate da tutti gli altri algoritmi.


C'è un aumento di interesse per le reti neurali in questo momento, ma è uno dei più antichi algoritmi di apprendimento automatico a cui si possa pensare. Il primo neurone formale, la rete neurale cellulare, fu proposta, nella sua prima versione, nel 1943 da Warren McCulloch e Walter Pitts. Già nel 1958 Frank Rosenblatt propose la prima rete neurale molto semplice, che poteva già separare, ad esempio, oggetti nello spazio bidimensionale. E le reti neurali hanno attraversato alti e bassi nel corso di oltre mezzo secolo di storia. L'interesse per le reti neurali fu molto grande negli anni '50 e '60, quando furono ottenuti i primi risultati impressionanti. Le reti neurali hanno poi lasciato il posto ad altri algoritmi di apprendimento automatico che all’epoca erano più potenti. L'interesse riprese nuovamente negli anni '90, per poi diminuire nuovamente.


E ora, negli ultimi 5-7 anni, si è scoperto che in molti compiti legati all'analisi delle informazioni naturali, e tutto ciò che ci circonda è informazione naturale, questa è lingua, questa è parola, questa è un'immagine, un video, molte altre informazioni molto diverse: le reti neurali sono migliori di altri algoritmi. Almeno per ora. Forse la rinascita finirà di nuovo e qualcosa verrà a sostituirli, ma ora mostrano i migliori risultati nella maggior parte dei casi.

Cosa ha portato a questo? Il fatto che le reti neurali siano come un algoritmo di apprendimento automatico, devono essere addestrate. Ma a differenza della maggior parte degli algoritmi, le reti neurali sono molto critiche per il volume di dati, per il volume del campione di addestramento necessario per addestrarle. E le reti semplicemente non funzionano bene con piccole quantità di dati. Generalizzano male e lavorano male su esempi che non hanno visto durante il processo di apprendimento. Ma negli ultimi 15 anni la crescita dei dati nel mondo è diventata forse esponenziale, e ora questo non è più un grosso problema. Abbiamo molti dati.

La seconda pietra angolare della rinascita del networking è rappresentata dalle risorse informatiche. Le reti neurali sono uno degli algoritmi di machine learning più pesanti. Sono necessarie enormi risorse informatiche per addestrare una rete neurale e persino per applicarla. E ora abbiamo tali risorse. E, naturalmente, sono stati inventati nuovi algoritmi. La scienza non si ferma, l'ingegneria non si ferma e ora capiamo di più su come addestrare questo tipo di strutture.


Cos'è un neurone formale? Questo è un elemento molto semplice che ha un numero limitato di input, a ciascuno di questi input viene assegnato un certo peso e il neurone semplicemente prende ed esegue una somma ponderata dei suoi input. L'input potrebbe, ad esempio, essere gli stessi pixel dell'immagine di cui ho parlato prima. Immaginiamolo X 1 e fino a X n– questi sono semplicemente tutti i pixel dell’immagine. E a ogni pixel è associato un peso. Li riassume ed esegue su di essi alcune trasformazioni non lineari. Ma anche se non tocchiamo la trasformazione lineare, solo uno di questi neuroni è un classificatore abbastanza potente. Puoi sostituire questo neurone e dire che è solo un classificatore lineare, ed ecco cos'è un neurone formale, è solo un classificatore lineare. Se, ad esempio, nello spazio bidimensionale abbiamo un certo insieme di punti di due classi, queste sono le loro caratteristiche X1 E X2, cioè selezionando questi pesi V1 E V2, possiamo costruire una superficie divisoria in questo spazio. E quindi, se abbiamo questa somma, ad esempio, maggiore di zero, allora l'oggetto appartiene alla prima classe. Se questa somma è inferiore a zero, l'oggetto appartiene alla seconda classe.

E andrebbe tutto bene, ma l'unica cosa è che questo quadro è molto ottimista, ci sono solo due segni, le classi sono, come si suol dire, linearmente separabili. Ciò significa che possiamo semplicemente tracciare una linea che classifichi correttamente tutti gli oggetti nel training set. In realtà non è sempre così e non accade quasi mai. E quindi un neurone non è sufficiente per risolvere la stragrande maggioranza dei problemi pratici.


Questa trasformazione non lineare che ogni neurone esegue su questa somma è di fondamentale importanza perché, come sappiamo, se, per esempio, eseguiamo una somma così semplice e diciamo che questa, per esempio, è una nuova caratteristica Y 1 (L 1 x 1 + L 2 x 2 = y 1), e poi abbiamo, ad esempio, un secondo neurone, che riassume anch'esso le stesse caratteristiche, solo che questo sarà, ad esempio, L 1 "x 1 + L 2" x 2 =y 2. Se poi volessimo applicare nuovamente la classificazione lineare nello spazio di queste caratteristiche, ciò non avrebbe alcun senso, perché due classificazioni lineari applicate di seguito possono essere facilmente sostituite da una, questa è semplicemente la proprietà della linearità delle operazioni. E se eseguiamo qualche trasformazione non lineare su queste caratteristiche, ad esempio, la più semplice... In precedenza, abbiamo utilizzato trasformazioni non lineari più complesse, come questa funzione logistica, è limitata da zero e uno, e vediamo che ci sono aree di linearità qui. Cioè, intorno a 0 in x si comporta in modo abbastanza lineare, come una normale linea retta, e poi si comporta in modo non lineare. Ma, come si è scoperto, per addestrare efficacemente questo tipo di classificatori, è sufficiente la non linearità più semplice del mondo: solo una linea retta troncata, quando nella sezione positiva è una linea retta e nella sezione negativa lo è sempre 0. Questa è la nonlinearità più semplice e risulta che anche questa è sufficiente per addestrare efficacemente la classificazione.


Cos'è una rete neurale? Una rete neurale è una sequenza di tali trasformazioni. F1– Questo è il cosiddetto livello della rete neurale. Uno strato di rete neurale è semplicemente un insieme di neuroni che lavorano sulle stesse funzionalità. Immaginiamo di avere le caratteristiche iniziali x1, x2, x3, e abbiamo tre neuroni, ciascuno dei quali è associato a tutte queste caratteristiche. Ma ciascuno dei neuroni ha i propri pesi su cui pesa tali caratteristiche, e il compito di addestrare la rete è selezionare tali pesi per ciascuno dei neuroni che ottimizzano questa nostra funzione di errore. E funzione F1– questo è uno strato di tali neuroni e, dopo aver applicato la funzione, otteniamo un nuovo spazio di funzionalità. Quindi applichiamo un altro livello simile a questo spazio di funzionalità. Potrebbe esserci un numero diverso di neuroni, qualche altra non linearità come funzione di trasformazione, ma questi sono gli stessi neuroni, ma con gli stessi pesi. Quindi, applicando successivamente queste trasformazioni, otteniamo la funzione generale F– una funzione di trasformazione della rete neurale, che consiste nell'applicazione sequenziale di diverse funzioni.


Come vengono addestrate le reti neurali? Fondamentalmente, come qualsiasi altro algoritmo di apprendimento. Abbiamo un vettore di output che si ottiene all'uscita della rete, ad esempio una classe, una sorta di etichetta di classe. C'è qualche output di riferimento che sappiamo che queste funzionalità dovrebbero avere, ad esempio, tale oggetto o quale numero dovremmo attribuirgli.


E abbiamo un delta, cioè la differenza tra il vettore di uscita e il vettore di riferimento, e quindi sulla base di questo delta c'è una grande formula, ma la sua essenza è che se comprendiamo che questo delta dipende da Fn, cioè dall'output dell'ultimo strato della rete, se prendiamo la derivata di questo delta per pesi, cioè per quegli elementi che vogliamo addestrare, e applichiamo anche la cosiddetta regola della catena, cioè , quando abbiamo le derivate di una funzione complessa - questo è il prodotto della derivata per la funzione per il prodotto della funzione per il parametro, risulta che in questo modo semplice possiamo trovare le derivate per tutti i nostri pesi e adattarle a seconda sull'errore che osserviamo. Cioè, se non abbiamo errori su un particolare esempio di allenamento, le derivate saranno rispettivamente pari a zero e ciò significa che lo classifichiamo correttamente e non dobbiamo fare nulla. Se l'errore nell'esempio di training è molto grande, allora dobbiamo fare qualcosa al riguardo, cambiare in qualche modo i pesi per ridurre l'errore.

Reti convoluzionali

Ora c'era un po' di matematica, molto superficiale. Successivamente, la maggior parte del rapporto sarà dedicata alle cose interessanti che possono essere fatte utilizzando le reti neurali e che molte persone nel mondo stanno facendo ora, incluso in Yandex.


Uno dei metodi che per primo ha mostrato un utilizzo pratico sono le cosiddette reti neurali convoluzionali. Cosa sono le reti neurali convoluzionali? Diciamo che abbiamo un'immagine di Albert Einstein. Molti di voi probabilmente hanno visto anche questa immagine. E questi cerchi sono i neuroni. Possiamo connettere un neurone a tutti i pixel dell'immagine di input. Ma qui c'è un grosso problema: se colleghiamo ciascun neurone a tutti i pixel, allora, in primo luogo, otterremo molti pesi, e questa sarà un'operazione molto intensiva dal punto di vista computazionale, ci vorrà molto tempo per calcolarli una somma per ciascuno dei neuroni, e in secondo luogo, ci saranno così tanti pesi che questo metodo sarà molto instabile rispetto al sovraadattamento, cioè nel senso in cui sul set di allenamento prevediamo tutto bene, ma sul set di esempi che non sono inclusi nel set di formazione, lavoriamo molto male, semplicemente perché siamo passati al set di formazione. Abbiamo troppi pesi, troppa libertà, riusciamo a spiegare molto bene ogni variazione del training set. Pertanto, hanno ideato un'architettura diversa, in cui ciascuno dei neuroni è collegato solo a un piccolo quartiere nell'immagine. Tra le altre cose, tutti questi neuroni hanno gli stessi pesi e questo disegno è chiamato convoluzione dell'immagine.


Come viene effettuato? Qui al centro abbiamo il cosiddetto kernel di convoluzione: questo è un insieme di pesi di questo neurone. E applichiamo questo kernel di convoluzione a tutti i pixel dell'immagine in sequenza. Applica: ciò significa semplicemente pesare i pixel in questo quadrato in base ai pesi e ottenere un nuovo valore. Possiamo dire che abbiamo trasformato l'immagine e l'abbiamo filtrata con un filtro. Come in Photoshop, ad esempio, ci sono alcuni filtri. Cioè, il filtro più semplice è come trasformare un'immagine a colori in bianco e nero. E così abbiamo analizzato questo filtro e ottenuto un'immagine trasformata.

Qual è il vantaggio qui? Il primo vantaggio è che ci sono meno pesi, sono più veloci da contare e meno suscettibili alla riqualificazione. D'altra parte ciascuno di questi neuroni è ottenuto da qualche rilevatore, come mostrerò più avanti. Diciamo che se abbiamo un occhio da qualche parte nell'immagine, allora utilizzeremo lo stesso insieme di pesi, camminando attraverso l'immagine, per determinare dove si trova l'occhio nell'immagine.


Dovrebbe esserci un video qui.
E una delle prime cose a cui è stata applicata tale architettura è stato il riconoscimento dei numeri come gli oggetti più semplici.

Questo è stato applicato da qualche parte nel 1993 da Yann LeCun a Parigi, e qui ora ci sarà praticamente una registrazione d'archivio. La qualità è così così. Qui ora forniscono numeri scritti a mano, premono un pulsante e la rete riconosce questi numeri scritti a mano. In linea di principio, riconosce inequivocabilmente. Bene, questi numeri sono naturalmente più semplici perché sono stampati. Ma, ad esempio, in questa immagine i numeri sono molto più complicati. E ad essere onesti, nemmeno io riesco a distinguere bene questi numeri. Sembra esserci un quattro a sinistra, ma la rete indovina. Riconosce persino questo tipo di numeri. Questo fu il primo successo delle reti neurali convoluzionali e dimostrò che erano effettivamente applicabili nella pratica.


Qual è la specificità di queste reti neurali convoluzionali? Questa operazione di convoluzione è elementare e costruiamo strati di queste convoluzioni sull'immagine, trasformandole sempre di più nell'immagine. Quindi otteniamo effettivamente nuove funzionalità. Le nostre caratteristiche principali erano i pixel, quindi trasformiamo l'immagine e otteniamo nuove funzionalità in un nuovo spazio, che potrebbero consentirci di classificare più efficacemente questa immagine. Se immagini un'immagine di cani, possono trovarsi in una varietà di pose, in una varietà di luci, su una varietà di sfondi, ed è molto difficile classificarli direttamente basandosi solo sui pixel. E ottenendo in modo coerente una gerarchia delle caratteristiche dei nuovi spazi, possiamo farlo.
Questa è la principale differenza tra le reti neurali e altri algoritmi di apprendimento automatico. Ad esempio, nel campo della visione artificiale, il seguente approccio è stato adottato nel riconoscimento delle immagini prima delle reti neurali.

Quando prendiamo un argomento, ad esempio, dobbiamo determinare tra dieci classi a quale delle classi appartiene un oggetto: una casa, un uccello, una persona, le persone sono rimaste sedute per molto tempo e hanno pensato a quali segni si potrebbero trovare per distinguere queste immagini. Ad esempio, l'immagine di una casa è facile da distinguere se abbiamo molte linee geometriche che in qualche modo si intersecano. Gli uccelli, ad esempio, hanno colori molto vivaci, quindi se abbiamo una combinazione di verde, rosso e altre caratteristiche, probabilmente somiglieranno più a un uccello. L'intero approccio consisteva nel trovare quante più funzionalità possibili e poi sottoporle a un classificatore lineare abbastanza semplice, qualcosa come questo, che in realtà consiste in un livello. Esistono anche metodi più complessi, ma, tuttavia, hanno lavorato su questi segni inventati dall'uomo. E con le reti neurali, si è scoperto che puoi semplicemente creare un campione di addestramento, senza selezionare alcuna caratteristica, semplicemente alimentarlo con immagini come input, e imparerà da solo, selezionerà quelle caratteristiche che sono fondamentali per classificare queste immagini a causa di questo gerarchia.


Diamo un'occhiata a quali caratteristiche identifica la rete neurale. Ai primi strati di tale rete, risulta che la rete seleziona funzionalità molto semplici. Ad esempio, transizioni sfumate o alcune linee con angolazioni diverse. Cioè, evidenzia le caratteristiche - ciò significa che il neurone reagisce se vede approssimativamente un pezzo dell'immagine nella finestra del suo nucleo di convoluzione, nell'area di visibilità. Questi segnali non sono molto interessanti; potremmo inventarli noi stessi.


Andando più in profondità, vediamo che la rete inizia a evidenziare caratteristiche più complesse, come elementi circolari e persino elementi circolari insieme ad alcune strisce.


E più andiamo avanti lungo la rete neurale, più siamo lontani dall'input, più complesse diventano le caratteristiche. Cioè, ad esempio, questo neurone può già reagire alla faccia di un cane, cioè si illumina quando vede la faccia di un cane, un barattolo, un orologio o qualcos'altro in una parte dell'immagine.


A cosa serve tutto questo? Non è molto grande per gli standard moderni, ma per tre anni è stato il più grande database di immagini taggate al mondo Image.net. Ha poco più di un milione di immagini, divise in mille classi. Ed è necessario ottenere la massima precisione di riconoscimento su questo campione.


Questa selezione non è affatto facile. Devi solo capire che, ad esempio, un husky e un siberian husky sono due classi diverse lì. Se mi mostri queste due immagini, non sarò in grado di dire quale è un husky e quale è un Siberian husky, ma la rete può notare la differenza. Lì, secondo me, ci sono più di 300 razze di cani di classi diverse e solo un paio di dozzine di tipi di terrier. Cioè, una persona probabilmente ha una certa conoscenza specifica nel campo della cinologia, ma una persona comune no.


Abbiamo applicato una rete neurale a questo campione di immagini e abbiamo scoperto che ha svolto un ottimo lavoro. Ad esempio, qui viene mostrata un'immagine, la classe corretta viene mostrata sotto l'immagine e le previsioni di rete vengono mostrate qui in barre. E quanto più grande è la barra, tanto più sicura è la rete che questa previsione sia corretta. E vediamo che predice correttamente un leopardo, predice uno scooter, nonostante ci siano persone nell'immagine oltre allo scooter. Ma vede che lo scooter è l'oggetto dominante nell'immagine e lo prevede. Diciamo che prevede anche un segno di spunta, nonostante il fatto che l'intera immagine sia costituita solo da uno sfondo uniforme e il segno di spunta sia solo da qualche parte nell'angolo. Ma lei capisce che il segno di spunta è la base di questa scena. Allo stesso tempo, anche l'analisi degli errori di una rete neurale è molto interessante e consente di identificare, ad esempio, errori nel set di allenamento, perché questo set è stato contrassegnato da persone e le persone commettono sempre errori. Diciamo che c'è un'immagine con un dalmata e una ciliegia, alla quale la rete neurale risponde con grande sicurezza che si tratta di un dalmata. Bene, davvero, guardiamo questa immagine e vediamo che il soggetto principale è un dalmata. Ma in realtà c'è un ciliegio in primo piano, e la persona che ha marcato questa immagine durante il processo di campionamento, in qualche modo ha deciso che la ciliegia era l'oggetto dominante in questa immagine. E si scopre che la rete neurale era sbagliata secondo la nostra metrica.

D'altra parte, ad esempio, qui in basso a destra c'è qualche animale. Non sapevo che tipo di animale fosse. I segni dicono che si tratta di un gatto del Madagascar. Fidiamoci dei segni. Ma la rete fa un’ipotesi molto ragionevole su cosa potrebbe essere. Dice che è una specie di scimmia. Mi sembra che questi errori siano molto ragionevoli. Cioè, potrei anche supporre che si tratti di una specie di scimmia, molto rara ed esotica.


Il principale parametro di errore su questa base è il cosiddetto errore Top 5. Questo è quando prendiamo le prime 5 previsioni, le prime cinque previsioni in cui la nostra rete ha maggiore fiducia, e se la classe corretta dal markup è in quelle cinque previsioni, allora diciamo che la rete ha ragione. Un errore si verifica quando le nostre prime cinque previsioni non includono la classe corretta. E prima dell'era della rete neurale (questo è il 2010-2011, questo è prima dell'era delle reti neurali convoluzionali), vediamo che l'errore, ovviamente, è diminuito, era leggermente inferiore al 30%, e nel 2011 era addirittura leggermente inferiore, ma, ad esempio, nel 2012, quando abbiamo applicato per la prima volta una rete neurale convoluzionale a questo problema, si è scoperto che potevamo ridurre radicalmente l'errore, cioè tutti gli altri metodi non erano in grado di farlo, ma la rete neurale era capace di questo, e poi man mano che l'interesse per le reti neurali cresceva, si è scoperto che possiamo ridurre questo errore - questa sarà ora una speculazione - al livello che una persona può raggiungere su questa base. È stata effettuata una ricerca, non molto globale, cinque persone che hanno passato diversi giorni a prepararsi a riconoscere questo tipo di immagini e hanno ottenuto un errore intorno al 4,5% su questo campione e sulla rete neurale nel periodo primaverile oppure Nell'estate del 2015, questa pietra miliare è stata infranta, cosa che ha sorpreso tutti, c'erano molte notizie al riguardo e così via.


Quello che dicevo prima è che la profondità di questa rete, cioè il numero di queste caratteristiche che applichiamo sequenzialmente all'immagine di input, è importante. Ad esempio, nel 2013, il vincitore è stato un network che, secondo me, aveva circa 8 o 9 livelli di trasformazione sequenziale delle immagini. E, ad esempio, nel 2014, la vincitrice è stata una rete in cui ci sono molti livelli e l'architettura nel suo insieme è molto più complessa, ma la cosa principale è che è più profonda, cioè questo significa che applichiamo più non linearità nella nostra immagine di input e grazie a ciò otteniamo un miglioramento della qualità.


A cosa serve tutto questo? Non solo il riconoscimento delle immagini, ma come possiamo applicarlo nella pratica? Ad esempio, poiché tu ed io sappiamo già che ad ogni livello otteniamo alcune nuove funzionalità, possiamo prendere gli output da uno degli ultimi livelli della rete neurale e leggere qualcosa, diciamo che queste sono alcune nuove funzionalità dell'immagine, e cerca immagini simili in base a queste caratteristiche, ovvero, grosso modo, prova a trovare immagini con le stesse caratteristiche di quella di input. Ad esempio, esiste un'immagine del genere, i ragazzi giocano a basket, NBA, sta succedendo tutto e vogliamo trovare immagini simili.


Gettiamo questa immagine in un servizio di immagini simili e, in effetti, troviamo altre immagini. Sono giocatori diversi, squadre diverse. Ma vediamo che si riferiscono tutti al modo in cui il giocatore dribbla la palla in campo.


In effetti, ciò di cui sto parlando ora - algoritmi di visione artificiale - ha molte applicazioni, ma ci sono anche molte applicazioni nel mondo reale, come la ricerca di tali immagini e il riconoscimento. Ma ci sono anche molte applicazioni aneddotiche. Ad esempio, un gruppo di ricercatori ha provato a scattare una foto abbastanza semplice, che è qui a sinistra nella riga superiore dell'immagine, e ad insegnare alla rete a stilizzare questa immagine come dipinti di vari grandi artisti, come Pablo Picasso, Kandinsky, Vincent Van Gogh. Quello che stavano facendo era essenzialmente dare all'input un'immagine normale e un dipinto e dire: "Vogliamo che l'immagine di output sia simile all'immagine originale, ma contenga anche un po' dello stile di quell'artista". E, come vediamo, trasforma le immagini in un modo piuttosto interessante. E, da un lato, possiamo riconoscere l’immagine originale, così come i lineamenti dell’autore. Come puoi vedere, la maggior parte degli articoli di cui sto parlando risalgono al 2014-2015 circa e puoi anche entrare e vedere più in dettaglio.

Reti neurali ricorrenti

Nell’ultimo anno si sono diffusi altri modelli di reti neurali: non quelli convoluzionali che applichiamo alle immagini, ma i cosiddetti modelli di reti neurali ricorrenti. Cos'è?


Tipicamente, una rete di questo tipo, una rete feedforward, non ha memoria. Cioè, diciamo che abbiamo inviato un'immagine a questa rete, ha riconosciuto qualcosa, abbiamo inviato l'immagine successiva e non ricorda più nulla dell'immagine precedente. Cioè, non collega in alcun modo la sequenza di immagini tra loro. In molti problemi, questo approccio non è molto applicabile, perché se, ad esempio, prendiamo un testo, diciamo un testo in un linguaggio naturale, un capitolo di un libro, allora questo testo è costituito da parole e queste parole formano un certo sequenza. E vorremmo, ad esempio, alimentare questa parola in rete, quindi alimentarla con la parola successiva, ma in modo che non dimentichi la parola precedente, in modo che se ne ricordi, ricordi che era e analizza ogni parola successiva tenendo conto della storia precedente. E per questo esistono le reti neurali ricorrenti. Come puoi vedere qui, oltre al fatto che abbiamo un percorso dalle caratteristiche di input a qualche output della rete neurale, prendiamo in considerazione anche i segnali provenienti da questi strati interni dai passaggi temporali precedenti, cioè, ci sembra di ricordare il informazioni e restituirle a noi stessi come input. E una rete neurale così ricorrente può essere implementata.

Sulla destra c'è solo uno spostamento temporale. x0, x1, x2 e così via. E la rete ricorda ancora il suo stato precedente. E il modo in cui analizza ciascun oggetto di input dipende non solo da quell'oggetto, ma anche dalla cronologia precedente.


A cosa serve? Una delle applicazioni interessanti è, ad esempio, se vogliamo generare testi semplicemente per lettera. Diciamo che prima inizializziamo questa rete con una sequenza, ad esempio una parola, e poi vogliamo che ci sputi solo una lettera ad ogni passaggio temporale successivo, cioè quale lettera successiva vuole scrivere. Questo è un articolo in LaTeX, che ti permette di scrivere allo stesso tempo, cioè è un linguaggio di programmazione per scrivere articoli in generale. Se alleni la rete in questo modo e le permetti di generare testo, otterrai almeno parole significative. Cioè, non confonde le parole. Sembra che anche la sintassi delle frasi abbia un senso. Cioè, in inglese abbiamo un verbo, un soggetto, un predicato, ma la semantica di queste frasi, cioè il loro significato, non è sempre presente. Sembra che dal punto di vista costruttivo tutto sembri a posto, ma a volte ha poco significato. Ma questo è un modello molto semplice, genera un simbolo per passaggio. E, per esempio, sta anche cercando di disegnare dei diagrammi qui in alto a destra. Poiché il linguaggio di markup LaTeX consente non solo la scrittura, ma anche il disegno, prova a disegnare qualcos'altro.


Oppure, ad esempio, possiamo generare direttamente il codice sorgente dei programmi. Questa rete è stata addestrata sul codice sorgente del kernel Linux e possiamo vedere che sembra generare almeno quello che sembra un codice significativo. Cioè, abbiamo, ad esempio, funzioni, ci sono varie espressioni condizionali, loop e così via. Questo sembra avere senso. Presto le reti stesse scriveranno programmi per noi, a quanto pare, ma penso che questo sia ancora lontano e avremo ancora bisogno di programmatori, non solo di reti.


Si scopre che addestrare tali reti ricorrenti se le rappresentiamo semplicemente come strati di neuroni è piuttosto difficile. È difficile perché dimenticano molto rapidamente le informazioni sugli oggetti precedenti che abbiamo fornito loro prima di quello attuale. E a volte ne abbiamo bisogno per ricordare le relazioni tra oggetti molto distanti. Diciamo che se immaginiamo "Guerra e pace", un'opera meravigliosa di Leone Tolstoj, alcune frasi occuperanno diverse righe. E ricordo che quando li lessi, alla fine della frase avevo già dimenticato cosa c'era all'inizio. E lo stesso problema si osserva con le reti ricorrenti, dimenticano anche cosa è successo all'inizio della sequenza, il che non è quello che vorremmo. E per questo hanno ideato un'architettura più complessa. La cosa importante qui è che abbiamo un neurone al centro che fornisce il suo output al proprio input. Vediamo una relazione così ricorrente. Tra le altre cose, abbiamo anche neuroni separati che controllano, sono porte, cioè determinano se dobbiamo percepire le informazioni attuali in arrivo. C'è un cancello all'ingresso, cioè abbiamo un input e determiniamo se deve essere oltrepassato o meno. Oppure dovremmo ignorarlo e conservare solo i nostri ricordi. Allo stesso modo, esiste una valvola per i ricordi: dovremmo conservare i nostri ricordi nel momento attuale riguardo a quelli precedenti, o dovremmo resettarli e dire che stiamo cancellando la nostra memoria.

Da dove viene il numero di neuroni e cosa sono?
- Un neurone è semplicemente un sommatore che ha degli input e dei pesi con cui li somma in maniera ponderata. Questo è un elemento molto semplice.

E la quantità è una buona questione, una questione di approccio sperimentale. In compiti diversi, potremmo aver bisogno di un numero diverso di strati di questi neuroni e di un numero diverso di neuroni negli strati. Dipende molto dal compito. Ogni volta che ti imbatti in qualche problema che vuoi risolvere utilizzando le reti neurali, devi condurre un certo numero di esperimenti per capire che se hai 100 neuroni, non sono sufficienti. Apprende male, c'è un errore elevato nel training set, sono necessari più neuroni. Ad esempio, 100mila neuroni sono troppi, non abbiamo risorse di calcolo sufficienti per calcolare tutto e allenarlo. Si riqualifica sul set. Quindi la verità è da qualche parte nel mezzo. Prendiamo ad esempio 50mila e otteniamo la qualità di riconoscimento ottimale.
Ora vengono utilizzate reti simili che possono controllare con porte se è necessario percepire l'input corrente e se è necessario dimenticare parte della memoria che abbiamo attualmente. E l'architettura tipica di una rete di questo tipo assomiglia a questa.


Abbiamo una sequenza di input, ad esempio alcune frasi, all'ingresso di questa rete, e all'uscita possiamo anche generare parole utilizzando la stessa rete ricorrente. Cioè, comprimiamo la sequenza di input e generiamo la sequenza di output.

Cosa serve? Ci sono molte applicazioni, quindi non ne parlerò tutte. Un'applicazione attivamente studiata è, ad esempio, la traduzione. Cioè, in input abbiamo una frase da una lingua, ad esempio dal russo, e in output stiamo cercando di generare una traduzione di questa frase in un'altra lingua, ad esempio in inglese. Un'altra applicazione è un po' fantastica: è quando abbiamo un articolo che un giornalista ci ha scritto e vogliamo una sorta di breve riassunto di questo articolo, un abstract. E diamo in pasto l'intero articolo all'input di questa rete, e poi ci sputa alcuni brevi contenuti di questo articolo in uscita.

Oppure, ad esempio, possiamo addestrare un sistema che condurrà un dialogo e parlerà con esso. Ad esempio, possiamo prendere grandi registri di comunicazione tra le persone e il team di supporto tecnico, ovvero persone che risolvono alcuni problemi degli utenti relativi all'IT, addestrano tale rete e provano a comunicare con essa. Ad esempio, qui un utente ha un problema che non riesce a connettersi in rete a un terminale remoto e l'utente chiede cosa deve fare e la macchina tenta di risolvere il suo problema. Cerca innanzitutto di capire alcuni dati di input, cioè quale sistema operativo ha l'utente, cosa vede sullo schermo, prova a condurre vari test diagnostici e suggerisce alcune soluzioni. E tutto questo viene fatto utilizzando questa semplice rete, che consiste semplicemente nel pesare i vari input che le vengono forniti. Non c'è alcuna conoscenza segreta qui, o le persone non sono rimaste sedute per molto, molto tempo e hanno pensato: "Proviamo in qualche modo, se abbiamo una parola all'inizio di una frase, un'altra parola alla fine, come possiamo collegarle?" , analizzarli?" No, tutto questo è stato alimentato a una rete neurale, è stato addestrato e genera dialoghi così meravigliosi con una persona.

Alla fine, una rete neurale risolve un problema umano. Gli dice che ha bisogno di ottenere un altro certificato, qualcos'altro, inserire una password e la persona è soddisfatta.

Reti convoluzionali + ricorrenti

Possiamo provare a connettere reti convoluzionali con reti ricorrenti. Ne ho parlato separatamente di alcuni, di altri separatamente, ma possiamo provare a collegarli.


Ad esempio, l'attività "immagine in testo". Diciamo di avere un'immagine come input e di utilizzare una rete neurale convoluzionale per ottenere una rappresentazione compressa di questa immagine e alcune funzionalità. Successivamente, forniamo questi segni all'input della rete ricorrente e questa genera per noi una descrizione di questa immagine. Diciamo che tre anni fa questo sembrava semplicemente impossibile, ma ora le reti neurali descrivono semplicemente l'immagine, cosa è raffigurato su di esse, quali oggetti. E non si limitano a dire che nell’immagine c’è un oggetto del genere, ma lo descrivono in una frase coerente.

Dovrebbe esserci un altro video qui. Si chiama Camminare con una rete neurale. È stato pubblicato appena due o tre settimane fa. Uno degli appassionati delle reti neurali, chiamiamolo così, ha deciso di utilizzare la tecnologia "picture-to-text", semplicemente passeggiando per la sua città natale di Amsterdam con un telefono e filmando qualcosa con la telecamera, e ha cercato di capire cosa avrebbe fatto la rete dire agli oggetti del mondo circostante. Cioè non guardando quelle foto presenti nelle collezioni accademiche, che potrebbero non essere molto vicine alla realtà, ma semplicemente filmando ciò che accade intorno a lui. Non sarà molto visibile qui, ma spero che vedremo.

Qui in alto a sinistra c'è la risposta della rete a ciò che vede. Dice "un uomo con una giacca". Genera alcune frasi. Qui dice che questo è una specie di segno, non capisce cosa c'è scritto sopra, ma capisce che è un segno. Dice che questa è una persona che cammina per strada, ci sono degli edifici intorno, una finestra o una porta, un vicolo, dice che ci sono molte biciclette (ma questa è Amsterdam, ci sono molte biciclette lì, quindi dice spesso che ci sono biciclette ovunque). Dice che c'è una barca bianca parcheggiata. E così via. Non direi che questa è un'immagine appositamente preparata, una persona semplicemente cammina e scatta foto, e in tempo reale si scopre che la rete neurale fa fronte al riconoscimento di ciò che la persona sta filmando.

Quanto velocemente lo riconosce? E se una persona corre e non cammina, quanto velocemente capisce?
- Mi sembra che il frame rate sia appena impostato.
- SÌ. In effetti ti ho un po' ingannato, perché, per quanto ricordo, questo video è stato girato in post-elaborazione, cioè lo ha filmato, e poi lo ha eseguito localmente sul computer attraverso il riconoscimento di questa rete. Ma ora molti telefoni cellulari hanno le schede grafiche presenti nei computer, solo che sono più piccole, meno potenti, ma più potenti dei processori. E in generale, con quasi una sorta di campionamento dei frame in tempo reale, puoi riconoscere qualcosa con una piccola rete, anche quando stai correndo, cioè provare a farlo. In generale, è possibile, e penso che tra qualche anno questo problema sarà meno rilevante, perché, come sappiamo, le capacità informatiche stanno crescendo e probabilmente un giorno sarà possibile farlo in tempo reale con le reti più grandi riconoscere qualcosa.

- Qual è il vero scopo di questa tecnologia di riconoscimento delle immagini? Cioè, lo vedo io stesso.
- Qui mi dicono - per le persone con disabilità questo ha molto senso. In secondo luogo, immagina come funzionano le ricerche di immagini su Internet. Come?
- Mi hai parlato proprio di queste cose.
- Questa è una ricerca di immagini simili. E, ad esempio, se vai su un server come "Yandex.Pictures"...
- Per parole chiave.
- SÌ. E a questo punto, se riusciamo a generare queste parole chiave dall’immagine, la ricerca sarà semplicemente migliore. Cioè possiamo trovare immagini... Al giorno d'oggi, le ricerche di immagini si basano principalmente sui testi allegati alle immagini. Cioè, c'è del testo attorno all'immagine. Quando inseriamo un'immagine nel nostro indice, diciamo che l'immagine ha il seguente testo. Quando un utente inserisce una query, proviamo ad abbinare parole e query con le parole nel testo. Ma il testo dell'immagine è una cosa molto complessa; non è sempre rilevante per l'immagine accanto a cui si trova. Molte persone cercano di ottimizzare i propri guadagni, ad esempio, su Internet o qualcosa del genere, e quindi non si tratta sempre di informazioni affidabili.

E se possiamo dire in modo affidabile cosa c'è nella foto, questo sarà molto utile.

In quel video c'erano descrizioni piuttosto secche e brevi, cioè abbiamo detto che "Ecco una barca parcheggiata da qualche parte" o "Ecco una pila di biciclette stese sull'asfalto", ma possiamo addestrare la rete con un campione leggermente diverso , ad esempio, su un campione di romanzi d'avventura, e quindi genererà descrizioni molto vivaci per tutte le immagini. Non saranno del tutto rilevanti per queste immagini, cioè non del tutto, ma almeno saranno molto divertenti. Ad esempio, qui un uomo sta semplicemente scendendo con gli sci, e la rete dice che c'era un uomo che viveva da solo, e non sapeva quanto lontano poteva andare, e ha inseguito, non ha mostrato segni di debolezza. Cioè, un romanzo d'avventura basato su un'immagine. Ciò è stato fatto anche da un gruppo di ricercatori in risposta a ciò che hanno detto: “Hai delle previsioni molto secche basate sull’immagine, in qualche modo la rete non brucia”. Ma hanno fatto sì che la rete generasse descrizioni interessanti.

Anche qui, se leggi, c'è tutto un dramma su come una persona è salita su un autobus, ha cercato di arrivare da qualche parte e poi ha cambiato percorso, è salita in macchina, è finita a Londra e così via.

In realtà, possiamo cambiare questi due blocchi nella nostra architettura e dire che “Mettiamo al primo posto una rete ricorrente che percepirà le parole, e poi una sorta di rete convoluzionale che non comprimerà la nostra immagine, ma viceversa, la aprirà ." Cioè, esiste una sorta di vettore di caratteristiche in uno spazio e vogliamo generare un'immagine utilizzando questo vettore di caratteristiche. E uno dei miei colleghi di Yandex ha detto: “Il futuro è qui, solo un po’ confuso per ora”. E il futuro è davvero qui, ma leggermente sfocato. Qui puoi vedere che stiamo generando un'immagine in base alla descrizione. Ad esempio, in alto a sinistra, un autobus giallo è parcheggiato in un parcheggio. Qui i colori sono purtroppo difficili da percepire, ma se sostituiamo, ad esempio, la parola “giallo” con la parola “rosso” nella stessa frase, il colore di questo punto, che è un autobus, sarà davvero cambiare, cioè diventerà rosso. E la stessa cosa, se specifichiamo che si tratta di un autobus verde, allora questo punto diventerà verde. Assomiglia davvero un po' ad un autobus.
Qui si presenta la stessa cosa: se cambiamo non solo il colore, ma anche gli oggetti stessi, ad esempio "c'è una tavoletta di cioccolato sul tavolo" o "c'è una banana sul tavolo", allora non impostiamo direttamente il colore colore dell'oggetto, ma è chiaro che la tavoletta di cioccolato è solitamente marrone e una banana è solitamente gialla, e quindi, anche senza specificare direttamente il colore dell'oggetto, la nostra rete cambia parte del colore dell'immagine.

Questa è più o meno la stessa cosa di cui parlavo prima. Ad esempio, un branco di elefanti cammina attraverso un campo bruciato, attraverso un campo con erba secca. E l'erba secca è solitamente arancione e l'erba verde è solitamente verde. E qui puoi vedere che alcune creature, poco distinguibili, camminano su qualcosa di verde, e qui su qualcosa di arancione. Di solito c'è più di una di queste creature. Se ci incontreremo tra un anno o sei mesi, faremo grandi progressi in questo settore.

Reti neurali + apprendimento per rinforzo

Ciò di cui vorrei parlare in conclusione è l’argomento molto interessante “Combinazione di reti neurali con apprendimento per rinforzo”. Qualcuno di voi ha letto cos'è l'apprendimento per rinforzo?

- Esiste una cosa del genere in psicologia.
- In effetti, ha a che fare con la psicologia. Il campo dell’“accoppiamento delle reti neurali con l’apprendimento per rinforzo” è l’area biologicamente e psicologicamente più rilevante della ricerca sulle reti neurali.

Immaginiamo di avere un topo e un labirinto. E sappiamo che alla fine di questo labirinto c'è formaggio, acqua, carote e niente. E sappiamo che ognuno di questi elementi ha una certa utilità per il nostro mouse. Ad esempio, un topo ama molto il formaggio, ma ama meno le carote e l'acqua, ma le ama allo stesso modo, ma non le piace proprio niente. Cioè, se arriva alla fine del labirinto e non vede nulla, sarà molto turbata.

Immagina che in questo semplice labirinto abbiamo solo tre stati in cui può trovarsi il mouse: questo S1. Capace S1 può fare una scelta: andare a sinistra o andare a destra. E capace S2 E S3 anche lei può scegliere di andare a sinistra o a destra.


Possiamo creare un meraviglioso albero che ci dice che se il mouse va due volte a sinistra, riceverà un valore pari a quattro unità convenzionali. Se va a destra, e non importa se va a destra o a sinistra, dopo la prima volta che va a destra, ottiene il valore di due.

E il compito dell'apprendimento per rinforzo in questo caso più semplice è costruire una funzione Q tale per ogni stato S nel nostro labirinto o in alcuni dei nostri ambienti dirà: “Se esegui questa azione, ad esempio, vai a sinistra, allora potrai ricevere questa o quella ricompensa”. Per noi è importante poterlo fare S1 quando non sappiamo ancora cosa ci aspetta, quindi questa funzione dice che "Se vai a sinistra in questo stato, puoi ottenere la ricompensa 4". Anche se, se veniamo da S1 andiamo a S2, allora possiamo ottenere una ricompensa pari a 0. Ma la ricompensa massima che possiamo ottenere con la corretta strategia comportamentale è 4.


Ciò si riflette in questa formula. Immaginiamo che per alcuni degli stati che conosciamo, per tutti i seguenti stati che possono essere raggiunti da questo, conosciamo la ricompensa ottimale, cioè conosciamo la politica di comportamento ottimale. Quindi, per lo stato attuale, possiamo dire molto facilmente quale azione dobbiamo eseguire. Possiamo semplicemente considerare tutti gli stati seguenti, dire in quale dei seguenti stati otteniamo la ricompensa maggiore - far finta di saperlo, anche se in realtà non è così - e dire che dobbiamo andare allo stato in cui la ricompensa attesa di più.


Esiste un algoritmo per questa funzione, poiché non conosciamo la politica di comportamento ottimale per i seguenti stati.


E questo algoritmo è abbastanza semplice, è iterativo. Immaginiamo di avere questa funzione D(s, a).


Abbiamo il suo vecchio significato e vogliamo aggiornarlo in qualche modo in modo che valuti più correttamente il mondo reale attuale.

Cosa dovremmo fare? Per tutti i seguenti stati, dobbiamo stimare dove possiamo guadagnare il massimo massimo, in quale dei seguenti stati. Vedete che questa non è ancora una stima ottimale, è solo una sorta di approssimazione di questa stima. E questa è la differenza tra la valutazione della ricompensa nello stato attuale e in quello successivo. Cosa significa questo?

Immaginiamo di essere in uno stato del nostro ambiente, ad esempio, prendiamo semplicemente che questo sia una specie di labirinto, inoltre, con tali cellule, cioè siamo qui in questo stato e vogliamo trovare questa funzione Q (S, su), cioè trovare quanto possiamo acquisire di questa utilità se saliamo.

E diciamo che al momento attuale questa funzione è pari a tre. E in questo stato S, in cui passiamo dopo essere usciti S, immagina che se prendiamo massimo a" Q(S",a"), cioè prendiamo il massimo che possiamo ottenere da questo stato S, è uguale a 5, per esempio. Abbiamo chiaramente qualche incoerenza. Cioè, sappiamo che da questo stato possiamo ottenere la ricompensa 5, ma in questo stato per qualche motivo non lo sappiamo ancora, anche se se saliamo, possiamo ottenere questa ricompensa 5. E in questo caso, proviamo eliminare questa incoerenza, cioè prendere la differenza tra Q (S, su)=3 E massimo (a") ⁡ Q(S",a")=5 e quindi, nell'iterazione successiva, aumentiamo il valore di questa azione in quello stato. E così impariamo in modo iterativo.


A cosa serve tutto questo? In questo compito, a cui inizialmente le reti neurali non avevano nulla a che fare, si trattava dell'apprendimento per rinforzo, dove venivano utilizzati anche metodi di apprendimento classici, che è anche possibile applicare.


Abbiamo i giochi Atari. Non sono sicuro che qualcuno di voi ci abbia giocato perché nemmeno io ci ho giocato. Ci ho giocato, ma da adulta. Sono molto diversi. Il più famoso di loro, che si trova in basso a sinistra, si chiama Space Invaders, questo è quando abbiamo una navetta, un gruppo di invasori alieni gialli si avvicina a noi, e noi siamo un cannone verde così solitario, e stiamo provando sparare a tutti questi invasori gialli e vincere così.
Ci sono giochi molto semplici, come il Ping Pong, in cui dobbiamo cercare di non perdere la palla nella nostra metà campo e fare in modo che l'avversario perda la palla nella propria metà campo.


Ciò che possiamo fare? Possiamo ancora prendere le reti neurali convoluzionali, alimentare l'immagine del gioco come input a queste reti neurali convoluzionali e cercare di ottenere come output non la classe di questa immagine, ma cosa dovremmo fare in questa situazione di gioco, cioè cosa dovremmo fare : vai a sinistra, spara, niente non farlo e così via.

E se creiamo una rete così abbastanza standard, cioè ci sono strati convoluzionali, strati semplicemente con neuroni, e la addestriamo, la lanciamo in questo ambiente - e in questo ambiente dobbiamo capire correttamente che abbiamo un account, e questo account è proprio una ricompensa: se eseguiamo questo gioco e lasciamo che impari un po', otterremo un sistema che può, come mostrerò più avanti, persino battere una persona.

Cioè, ora sono a un livello significativamente più alto rispetto alla persona migliore che gioca a questo gioco. E vediamo che questo gioco non è molto semplice, qui bisogna nascondersi dietro queste piccole cose rosse. Ci proteggono. E quando vediamo un blaster volare verso di noi, è meglio schivarlo, nascondersi dietro di esso, quindi tornare indietro e continuare a sparare ai pixel gialli sopra. Non sembra molto impressionante, credo. Ma in realtà, ci è voluto molto lavoro per raggiungere un simile passo avanti. E proverò a dirvi perché è davvero impressionante.

Anche prima dell'uso delle reti neurali in questo compito, esistevano molti metodi creati appositamente per ciascuno di questi giochi e funzionavano molto bene. A volte picchiano anche una persona e così via. Ma, come nel campo del riconoscimento delle immagini, le persone hanno dovuto lavorare molto duramente per elaborare determinate strategie vincenti in questo gioco.

Hanno preso ogni gioco, ad esempio Space Invaders o Ping Pong, hanno pensato a lungo a come muoversi, hanno escogitato alcuni segni, hanno detto che se la palla vola con un tale angolo e a una tale velocità, allora dobbiamo sviluppare una velocità tale, da riceverlo dalla parte opposta e da far sì che rimbalzi comunque in modo scomodo per il nemico. E così via. E per ogni gioco questo doveva essere inventato separatamente. E ora hanno preso la stessa architettura di rete neurale, l'hanno lanciata in giochi diversi, e in tutti questi giochi questa stessa architettura, anche se con pesi diversi - in ogni gioco c'erano pesi diversi, ma la stessa architettura - è riuscita a battere quasi tutti questi metodi sono stati inventati nel corso di 10-20 anni.

Qui il blu indica, grosso modo, quanti punti ottiene la rete neurale, il grigio è lo stato dell'arte che le reti neurali possono raggiungere e le percentuali nelle colonne indicano la percentuale in cui la rete neurale gioca meglio di una persona. Possiamo vedere, ad esempio, che una rete neurale gioca a flipper meglio del 2500% rispetto a un essere umano. La rete neurale gioca a boxe, a una varietà di giochi, a corse, a tennis, a ping-pong e persino a Space Invaders meglio di un essere umano. Inoltre, devi capire che Space Invaders è un gioco molto complesso. Se guardiamo qui, è qui, e questa cosa grigia è lo stato dell'arte di prima, grosso modo. Diciamo solo che è stato molto cattivo. Ciò significa che questo gioco è molto difficile e con l'aiuto delle reti neurali è possibile non solo batterlo, ma anche battere una persona.

In effetti, sto mostrando solo la parte superiore di questo grafico, c'è ancora una parte di questo grafico in basso dove il successo della rete neurale va in ordine decrescente, ma ora nella maggior parte dei giochi Atari con nuovi risultati la rete vince sopra l'umano.
Naturalmente, ci sono giochi molto complessi per la rete, in cui è necessario avere la memoria di cui ho parlato, e lì si possono applicare anche reti ricorrenti, e quindi i risultati miglioreranno in modo significativo.

Grazie per l'attenzione. Spero che tu abbia ancora domande.

L'unica cosa che volevo dire è che su Internet c'è una quantità folle di materiali diversi sulle reti neurali, molti materiali sotto forma di articoli scientifici, che probabilmente saranno difficili da comprendere da zero. Tuttavia, ci sono ottimi tutorial. Nella maggior parte dei casi sono in inglese. C'è un ottimo corso di Viktor Lempitsky nello ShAD per adulti. Esiste, ad esempio, un secondo collegamento: la cosiddetta Guida degli hacker alle reti neurali. Questo è un tutorial senza matematica, solo con programmazione. Cioè, lì, ad esempio, nel linguaggio Python viene mostrato come realizzare le reti più semplici, come addestrarle, come raccogliere campioni e così via. Esistono molti strumenti software che implementano le reti neurali e sono molto facili da usare. Cioè, tu, in parole povere, crei semplicemente neuroni, crei strati, assembli una rete neurale da mattoni e poi la usi. E ti assicuro che ognuno di voi può farlo: prova a sperimentare. È molto interessante, divertente e utile. Grazie per l'attenzione.

Tag: aggiungi tag