O produto interno como operação básica para neurônios e camadas
O produto interno como operação básica para neurônios e camadas. Iniciei os estudos do Deep-ML, uma plataforma para prática de aprendizado de máquina.
Seguindo na ordem, considerei o desafio 1, Matrix-Vector Dot Product.
Lembremos que o neurônio implementa a operação simples de soma ponderada multiplicando o w, os pesos do neurônio, e a entrada x, algum dado de um certo domínio.
Bom, essa soma ponderada tem como nome formal produto interno.
Para o neurônio, são dois vetores envolvidos, então se fala em produto interno vetor-vetor.
Para a camada, um conjunto de neurônios, se fala em produto interno matriz-vetor. Isso é muito importante para entender como se dá a computação na rede neural.
Continuamos com nossa entrada simples, como um vetor.
x = [2.0, 4.0]
Consideremos que temos agora 4 neurônios. Cada um é um vetor e eles juntos ficam em uma matriz. Cada linha é um neurônio.
Para a camada, realiza-se uma soma ponderada para cada linha, ou seja, para cada neurônio.
Vejamos como fica no código. Foi a minha implementação simples no desafio para NumPy.
def matrix_dot_vector(a: list[list[int|float]], b: list[int|float]) -> list[int|float]:
# Return a list where each element is the dot product of a row of 'a' with 'b'.
# If the number of columns in 'a' does not match the length of 'b', return -1.
if len(a[0]) != len(b):
return -1
result = []
for row_index, row in enumerate(a):
row_result = 0
for col_index, col in enumerate(row):
row_result += col * b[col_index]
result.append(row_result)
return result
Basicamente um loop pelas linhas da matriz a realizando a soma ponderada com b.
Posso atualizar aqui esse post para incluir o código em PyTorch, CUDA e Tinygrad.
Eu conheço Torch, mas CUDA e Tinygrad seriam novos aprendizados. Muito bom.