Breno

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.