Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

22.

406 · Modelatge i Optimització · PAC2


2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

Presentació

Moltes vegades es fa la broma de que la intel·ligència artificial no és res més que una qüestió d’a-
justament de corbes. Quina part té això de cert? La majoria de models d’aprenentatge automàtic
es construeixen buscant, dintre d’un cert tipus de funcions (siguin lineals, arbres de decisió, xarxes
neuronals. . . ), quina és la que s’ajusta millor a les nostres dades. Tècnicament, aquestes funci-
ons depenen de certs paràmetres. I per tant, fer un ajust consisteix en trobar quins paràmetres
minimitzen l’error entre el que prediu la funció i les dades que tenim.

Competències

En aquesta pràctica es treballen les següents competències del Grau en Ciència de Dades Aplicada:

• Que els estudiants hagin desenvolupant aquelles habilitats d’aprenetatge necessàries per con-
tinuar amb estudies posteriors amb un alt grau d’autonomia.
• Fer servir de forma combinada els fonaments matemàtics, estadı́stics i de programació per a
desenvolupar solucions a problemes en l’àmbit de la ciència de dades.
• Resumir, interpretar, presentar i contrastar de forma crı́tica els resultats obtinguts fent servir
les eines d’anàlisi i visualització adecuades.

Objectius

Els objectius concrets d’aquesta PAC són:

• Entendre quines són les condicions i les intuicions per a trobar mı́nims de funcions sense
restriccions.
• Ser capaç de programar el mètode del gradient per resoldre problemes d’optimització sense
restriccions.
• Entendre quin rol pren l’optimització en l’aprenentatge automàtic. Veure quin és el plante-
jament tı́pic d’ajust de models.

1
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

Descripció de la PAC

Una de les tècniques més populars en sistemes de recomanació (de llibres, sèries, etc) es basa en
factoritzar la matriu que determina quins usuaris han consumit quins objectes, com a producte
de dues matrius. L’objectiu d’aquesta activitat és programar un sistema de recomanació de dues
maneres diferents

• Mitjançant el mètode de Mı́nims Quadrats Alternats (ALS en anglès), fent servir la regressió
lineal.
• Amb el métode del descens del gradient estocàstic

Recursos

Recursos Bàsics
• Document ”Guia d’estudi optimització sense restriccions ”
• Referència ”Boyd & Vandenberghe, Convex Optimization, Secció 3.1, pp. 67-78”

Recursos Complementaris
• Document ”Hands-On Programming with R”

• Curs ”Introduction to R”
• Curs ”Intermediate R”

Criteris d’avaluació
• La pràctica s’ha de resoldre de manera individual.

• És necessari justicar tots els passos realitzats a la resolució de la pràctica.

2
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

Tingueu en compte que aquesta activitat representa un 25% sobre el total de la nota de les PAC.
Per a més informació sobre el model d’avaluació de l’assignatura, consulteu el pla docent.

Format i data de lliurament

Cal lliurar un únic document PDF amb les respostes de tots els exercicis. Cal realitzar la PAC
amb un processador de textos, no s’acceptaran solucions a mà i escanejades.

El nom del fitxer ha de ser PAC2Cognom1Cognom2Nom.pdf. Aquest document s’ha de lliurar a


l’espai de Lliurament i Registre AC de l’aula abans de les 23:59 del dia 02/11/2020. No s’acceptaran
lliuraments fora de termini.

3
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

L’objectiu d’aquesta PAC és programar un sistema de recomanació basat en factorització de ma-
trius. Es parteix de la base que les dades venen donades per una matriu usuari-ı́tem de dimensions
n × m, on n és el nombre d’usuaris i m és el nombre d’ı́tems. En cada cel·la hi haurà un 0 o un 1,
determinant si aquell usuari ha consumit o no aquell ı́tem.
 
1 0 1 0
1 1 0 0

Exemple de matriu usuari-ı́tem amb n=2 i m=4

Per exemple, en aquesta matriu veiem que l’usuari 1 ha consumit els ı́tems 1 i 3. Voldrı́em, a
partir d’aqueste informació, ser capaços de fer una nova recomanació (ı́tems que els hi puguin ser
interessants, i que no hagin vist encara) per a cada un dels usuaris. L’idea subjacent és que si dos
usuaris tenen gustos en comú, es pot fer servir els gustos d’un per a fer suggeriments a l’altre.

Intuı̈ció: A nivell matemàtic, si tinguèssim un vector descriptiu vi de p dimensions de cada ı́tem


i (per exemple si són pel·lı́cules, podrı́a ser any que es va produı̈r, gènere de la pel·lı́cula, etc.),
podrı́em intentar trobar un model lineal per cada usuari u amb coeficients βu , on la variable
resposta yu,i ens diu si l’usuari veurà o no la pel·lı́cula:

yu,i = βu vi + εu,i

La variable εu,i representa el terme d’error no explicat pel vector descriptiu vi . O anàlogament
tambè podriem pensar que tenim una descripció de l’usuari (edat, gènere, etc.), i intentar aplicar
un model lineal per cada pelı́cula amb tots els usuaris. Però tal i com hem plantejat el problema
(perquè en la realitat pot passar), no tenim cap de les dues informacions.

Factorització de matrius: Les tecniques de factorització de matrius (usuari-ı́tem) proposen


trobar a travès d’un problema d’optimització vectors vi per cada ı́tem i que farien el rol dels
vectors descriptius d’ı́tem que no tenim, i vectors xu per cada usuari u que vindrien a ser les
descripcions dels usuaris que tampoc tenim. Amb aquests vectors vi , xu expressarem si un usuari
u consumirà o no ı́tem i, yu,i com a producte escalar

yu,i ∼ xu vi

El problema d’optimització es proposa de la següent manera. Partint que tenim la matriu amb
cel·les yu,i , busquem els vectors vi , xu per cada u, i de manera que minimitzin l’error
X
min p (yu,i − vi xu )2
vi ,xu ∈R
u,i

4
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

Observacions:

• En aquests mètodes, tot i que les variables yu,i són binàries, s’aproximen per productes
escalars. Malgrat el resultat vi xu seria natural que s’interpretès com la probabilitat de
consumir o no l’ı́tem, passa sovint que el resultat numèric no està en l’intèrval [0, 1]. En
realitat el resultat de vi xu és una puntuació que ordena la prioritat dels resultats
• Hi hà un paràmetre p que és la llargada del vector descriptiu. Aquest és un hiperparàmetre
que en aprenentatge automàtic s’afina amb validació creuada (no explicarem aquı́ què és la
validació creuada, això correspon a un curs d’aprenentatge automàtic).

Objectiu: L’objectiu d’aquesta pràctica és programar un sistema de recomanació. Us recomanem


que feu una ullada a la pràctica del semestre anterior per a veure com abordar el problema. En
aquesta pràctica en centrarem en la següent versió del problema d’optimització

!
X X X
min p (yu,i − vi xu )2 + λ kvi k22 + kxu k22 ,
vi ,xu ∈R
u,i i u

2
P
P λ > 0.2 Per entendre què aporta aquesta variació, hem considerar que el factor λ( i kvi k2 +
on
u kxu k2 ) penalitza que les solucions prenguin valors molt alts, d’una manera molt similar al ridge
regression (vegueu l’apartat 2.2.2 de la guia d’estudi).

Entrega: A part de les preguntes teòriques, s’ha d’entregar un script en R, que llegeixi un csv,
on hi haurà la descripció d’una matriu (sense noms de columnes ni files) i escrigui per pantalla,
de cada usuari (en ordre), dels ı́tems que no ha consumit, quin tindrà més probabilitat de ser
consumit, i escriure-ho en un archiu.

Important: El script s’haurà de poder executar mitjançant una commanda per consola de l’estil

> RScript metode1.R dataset.csv results.csv

Per exemple, tenim un conjunt de dades que s’anomena ’dataset.csv’


1 1 ,0 ,1 ,0
2 1 ,1 ,0 ,0

i el script metode1.R seria


1 # captura arguments
2 args = commandArgs ( trailingOnly = TRUE )
3

5
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

4 input _ file = args [1]


5 output _ file = args [2]
6
7 # llegeix dataset
8 dataset <- read . csv ( input _ file , header = FALSE )
9
10 # aqui hi hauria d ’ haver el metode d ’ optimitzacio
11 results <- data . frame ( items = c (2 , 3) )
12
13 # guarda els resultats a un arxiu
14 write . table ( results , output _ file , quote = FALSE , col . names = FALSE , row . names = FALSE )

El resultat del script de R serà un arxiu results.csv amb el format següent.


1 1
2 2

Mètodes

1. [1p] Perquè λ ha de ser positiva?

Solució:
L’objectiu de la penalització és que els coeficients no creixin gaire. Quan un coefcicient és
zero, vol dir que la variable que acompanya no té cap pes. Mentre coeficients molt grans fan
que aquella variable tingui molt de pes en la decisió final. Una manera de ser prudent es
voler que els coeficients no siguin grans, llevat del cas que sigui realment necessari.

Si la λ és negativa, com que el problema és de minimització, estem afavorint que els coeficients
siguin grans, en comptes de petits.

2. [1.5p] La funció
!
X X X
2
L(v, x) = (yu,i − vi xu ) + λ kvi k22 + kxu k22
u,i i u

no és convexa (podeu veure la pràctica del semestre anterior). Això vol dir que hi ha punts
on pot ser localment convexa i punts on pot ser localment concava. Si fixem el valor d’una de
les dues components (per exemple les x), i nomès deixem que variin les v, la funció resultant

6
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

!
X X X
2
L(v) = (yu,i − vi xu ) + λ kvi k22 + kxu k22
u,i i u

és convexa? Raona la teva resposta (podeu fer servir alguns dels resultats que hi ha al llibre
del Boyd Vandenberghe al capı́tol de funcions convexes).

Solució:
Al capı́tol 3 del Boyd Vandenberghe, exemple 3.13 explica algunes normes senzilles per de-
terminar la convexitat d’algunes funcions. En el nostre cas, si les variables x són fixes, la part
yu,i − vi xu és lineal en v i per tant convexa. Potències de funcions convexes (amb exponent
més gran que 1) són funcions convexes, i sumes de funcions convexes són funcions convexes.
La norma d’un vector és una funció convexa i elevada al quadrat també ho és.

3. [1.5] Què passa quan la λ → ∞? És a dir, com són les solucions quan λ creix cada vegada
més? Cap a on tendirien si la λ fos negativa? Raona la teva resposta

Solució:
A mesura que la λ creix, qualsevol de les variables x, v que no siguin zero, aporten més pes
a la funció objectiu. Donat que estem buscant un mı́nim, a mesura que la lambda creix, la
funció objectiu tambè creix. L’única manera de compensar-ho és que les variables x, v siguin
zero o molt petites. Per això quan la λ → ∞ les variables x, v de la solució tendiran cap a zero.

En canvi, si la λ fòs negativa, variables x, v de norma més gran tindran un valor més petit en la
funció objectiu. Per tant, quan la λ → ∞ la noram de les variables x, v de la solució tendiran
cap ∞.

4. [3p] Aplicarem el mètode del descens del gradient estocàstic (no cal fer lots de dades, ja que
normalment es fa per volums de dades grans). Escriviu les equacions obtingudes pel mètode
del descens del gradient per a calcular els nous valors de les variables a cada pas. La teoria
la podeu trobar al a la guı́a d’estudi, l’algorisme ”Descens del gradient estocàstic”. Recordeu
que per a una funció S(w) el mètode del gradient amb pas λ seria a l’iteració k + 1

λ
wk+1 = wk − ∇w S
k

7
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

Solució:
Calculem primer les derivades parcials respecte a les components vik , xku (recordeu que vi , xu
són vectors de p components, per tant aquestes
P són les k-éssimes coordenades) Pper calcular

el gradient de la funció d’optimització L = u,i (yu,i − vi xu )2 + λ 2 2
P
i kv k
i 2 + u kxu k2
X
∂vik L = −2 (yu,i − vi xu )xku + 2λvik
u
X
∂xku L = −2 (yu,i − vi xu )vik + 2λxku
i

Si anomenem ṽik a l’actualització de vik , s al pas en el que estem, aleshores la podem calcular
2X
ṽik = vik + (yu,i − vi xu )xku − 2λvik
s u

i anàlogament tenim
2X
x̃ku = xku + (yu,i − vi xu )vik − 2λxku
s i

5. [3p] Implementeu la solució en R. La crida del script hauria d’incloure 3 arguments més: el
primer serà la dimensió dels vectors p, el segon per indicar el nombre d’iteracions, i el tercer
el pas λ, per exemple,
> RScript metode1.R dataset.csv results.csv 2 10 0.1
Per a poder provar si ho heu implementat bé, podeu fer servir aquests exemples. Us surten
coses que tenen sentit? Què passa quan la λ creix?

• Amb p = 1,
1 0 ,1 ,1 ,0
2 1 ,1 ,0 ,0
3 0 ,0 ,0 ,1

• Amb p = 1,
1 1 ,0 ,1 ,0
2 1 ,1 ,0 ,0
3 0 ,0 ,0 ,1

• Amb p = 1 i p = 2

8
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

1 1 ,1 ,0 ,0 ,0 ,1
2 1 ,0 ,0 ,0 ,0 ,1
3 1 ,1 ,1 ,0 ,0 ,0
4 0 ,0 ,0 ,0 ,0 ,1
5 0 ,0 ,0 ,1 ,0 ,0
6 0 ,0 ,0 ,1 ,1 ,0

Solució:

Una implementació en R seria:


1 args = commandArgs ( trailingOnly = TRUE )
2
3 input _ file <- args [1]
4 output _ file <- args [2]
5 epochs <- as . numeric ( args [3])
6 hidden _ dim <- as . numeric ( args [4])
7 lambda <- as . numeric ( args [5])
8 alpha <- as . numeric ( args [6])
9
10 dataset <- read . csv ( input _ file , header = FALSE )
11 dataset <- as . matrix ( dataset )
12
13 users _ n <- nrow ( dataset )
14 items _ n <- ncol ( dataset )
15
16 # ini cialitz acio aleatoria de matrius
17 items _ descriptions <- matrix ( runif ( hidden _ dim * items _ n ) , ncol = hidden _ dim )
18 users _ descriptions <- matrix ( runif ( hidden _ dim * users _ n ) , ncol = hidden _ dim )
19
20 for ( epoch in 1: epochs ) {
21
22 # # prediccions donades per la multiplicacio de les dues matrius
23 predictions <- users _ descriptions % * % t ( items _ descriptions )
24
25 # # valors actualitzat de la matriu descriptiva dels items
26 for ( item _ pos in 1: items _ n ) {
27 prediction _ error <- dataset [ , item _ pos , drop = FALSE ] - predictions [ , item _
pos , drop = FALSE ]
28 for ( k in 1: hidden _ dim ) {
29 increment <- -2 / epoch * ( t ( users _ descriptions [ , k , drop = FALSE ]) % * %
prediction _ error )
30 increment <- as . numeric ( increment )
31 gradient <- increment + 2 * lambda * items _ descriptions [ item _ pos , k ]
32 items _ descriptions [ item _ pos , k ] <- items _ descriptions [ item _ pos , k ] -
alpha * gradient
33 }
34 }

9
22.406 · Modelatge i Optimització · PAC2
2020-21-Sem.1 · Grau en Ciència de Dades Aplicada
Estudis d’Informàtica, Multimèdia i Telecomunicació

35
36 # # valors actualitzat de la matriu descriptiva dels usuaris
37 for ( user _ pos in 1: users _ n ) {
38 prediction _ error <- dataset [ user _ pos , , drop = FALSE ] - predictions [ user _ pos
, , drop = FALSE ]
39 for ( k in 1: hidden _ dim ) {
40 increment <- - 2 / epoch * ( prediction _ error % * % items _ descriptions [ , k ,
drop = FALSE ])
41 increment <- as . numeric ( increment )
42 gradient <- increment + 2 * lambda * users _ descriptions [ user _ pos , k ]
43 users _ descriptions [ user _ pos , k ] <- users _ descriptions [ user _ pos , k ] -
alpha * gradient
44 }
45 }
46
47 # calcul de la matriu de puntuacions usuari - item
48 scorings <- users _ descriptions % * % t ( items _ descriptions )
49 cat ( " Error : " , mean (( scorings - dataset ) ^2) , " \ n " )
50 }
51
52
53 print ( scorings )
54 # aquesta linia posa els items consumits a valor minim
55 new _ scorings <- ( 1 - dataset ) * scorings + min ( scorings ) * dataset
56 results <- data . frame ( items = apply ( new _ scorings , 1 , which . max ) )
57 print ( results )
58
59 write . table ( results , output _ file , quote = FALSE , col . names = FALSE , row . names =
FALSE )

10

You might also like