2.3.1 원소별 연산
relu 함수와 덧셈은 원소별 연산(element-wise operation)입니다. 이 연산은 텐서에 있는 각 원소에 독립적으로 적용됩니다. 이는 고도의 병렬 구현(1970~1990년대 슈퍼컴퓨터의 구조인 벡터 프로세서(vector processor)에서 온 용어인 벡터화된 구현을 말합니다)이 가능한 연산이라는 의미입니다. 파이썬으로 단순한 원소별 연산을 구현한다면 다음 relu 연산 구현처럼 for 반복문을 사용할 것입니다.19
def naive_relu( ): assert len(x.shape) == 2 ➊ x = x.copy() ➋ for i in range(x.shape[0]): for j in range(x.shape[1]): x[i, j] = max(x[i, j], 0) return x
➊ x는 랭크-2 넘파이 배열입니다.
➋ 입력 텐서 자체를 바꾸지 않도록 복사합니다.
덧셈도 동일합니다.
def naive_add( , ): assert len(x.shape) == 2 ➊ assert x.shape == y.shape x = x.copy() ➋ for i in range(x.shape[0]): for j in range(x.shape[1]): x[i, j] += y[i, j] return x
➊ x와 y는 랭크-2 넘파이 배열입니다.
➋ 입력 텐서 자체를 바꾸지 않도록 복사합니다.
같은 원리로 원소별 곱셈, 뺄셈 등을 할 수 있습니다.