MO431A - Tarefa 3
Data limite: Entregue um pdf, via email ou impresso, até as 10h do 10/4
Pode ser feito individualmente ou em duplas.
1 batch gradient descent
O arquivo Ex3X.npy contem 100 dados em 2D, e o arquivo Ex3y.npy contem o y correspondente a cada um dos dados em X
Você quer modelar os dados como uma regressão linear
\[ y = \theta_0 + \theta_1 x_1 + \theta_2 x_2\]
O objetivo é encontrar os valores de θ = [θ0, θ1, θ2]T que minimizam o erro quadrático medio, ou seja que minimizam
\[ \frac{1}{N} \sum (y_i - \theta^T x_i)^2 \]
para cada dado i. (N=100)
Implemente a descida do gradiente em batch. O valor inicial de θ deve ser [0,0,0]T
Faça 100 interações da decida do gradiente, e plote um gráfico com o erro para cada interação, o valor de θ1 para cada interação, e o valor de θ2 para cada interação.
Plote os gráficos para o learning rates de
- 0.01
- 0.001
- 0.00005
(No meu caso, o learning rate de 0.001 parece convergir mas ha um fenômeno que eu não consigo explicar, que o erro depois de ir para um valor bem pequeno, começa a crescer lentamente, com uma mudança lenta no θ1 e θ2 - Eu realmente não sei explicar isso. Se acontecer com o seu exemplo, não se preocupe com isso, só discuta os 3 exemplos em relação a convergência ou não e a velocidade de convergência.
2 SGD
Rode o Stocastic gradient descent para 2000 interações, com learning rate de 0.05, iniciando de [0,0,0]. A escolha do dado para atualizar o valor de θ é totalmente aleatório.
Plote a evolução do custo
Não ha uma definição única de SGD. A variação importante é se cada atualização do θ escolhe um dado totalmente aleatório, ou se cada dado tem que ser visitados pelo menos uma vez a cada macro-interação. Na primeira versão, repete-se n-iterações vezes a seleção aleatória de um dos dados do conjunto e a atualização do θ. Na segunda versão, cada macro-iteração apenas seleciona aleatoriamente a ordem na qual cada dado do conjunto de dados será usada na atualização.
Para esta implementação, use a primeira versão - totalmente aleatória - e o numero total de iterações é 1000.
3 Mini batch GD
Até onde eu sei,como no SGD, não há só uma definição de mini-batch. Por exemplo dado um mini-batch de 10 dados, esse mini-batch pode ser construído selecionando 10 dados do conjunto (sem repetição) ou repetindo 10 vezes a seleção aleatória de um dado, ou segmentando conjunto de dados em sequencias de 10 dados (sequenciais) e aleatoriamente escolhendo a ordem que esses segmentos serão utilizados.
Para esta parte do projeto, use a segunda definição - a repetição de k (k o tamanho do mini batch) vezes da seleção aleatória de um dado do conjunto.
Rode o mini-batchGD para uma janela de 10 dados, com 200 interações, e learning rate de 0.05, iniciando em [0,0,0]. Compare a evolução do custo entre o SGD e o mini-batch GD