Mapreduce e Paralelismo de Dados

Muitas vezes, iremos trabalhar com grandes quantidades de dados e para isso, iremos dividir os o conjunto de dados processado no algoritmo de otimização em subconjuntos para que possamos processar cada um deles em diferentes máquinas e, assim, treinar o nosso algoritmo em paralelo.

Podemos dividir o nosso conjunto de treino em \( z \) subconjuntos, onde \( z \) corresponde ao número de máquinas que podemos usar em paralelo. Para cada uma dessas máquinas, calculamos

\[ \large{} \sum _{i=p} ^q (h _{\theta}(x ^{(i)}) - y ^{(i)}) \cdot x _j ^{(i)} \]

Com isso, Mapreduce irá utilizar desses dados mapeados a cada máquina, e "reduzir" eles calculando:


Algorithm 12 Algoritmo Mapreduce


1: procedure

2:   for \( i=0 \) to \( n \) do

3:    \( \theta := \theta _j - \alpha \frac{1}{z}(temp _j ^{(1)} + temp _j ^{(2)} + \dots + temp _j ^{(z)}) \)

4:   end for

5: end procedure


Onde o valor de \( temp _j \) representa a função custo calculada em cada uma das máquinas. Mapreduce calcula a média, multiplicando pela taxa de aprendizado \( \alpha \) e atualizando os valores de \( \theta \).