[Basic] 벡터화(Vectorization)

고보·2024년 2월 7일

1 벡터화(Vectorization)

아래 내용은 앤드류 융 교수의 강좌를 요약했다.
https://www.youtube.com/watch?v=qsIrQi0fzbY

w, x가 둘 다 n차원의 열벡터일 때, 이를 로지스틱 회귀를 한다고 하자.
Z=wTx+bZ = w^Tx + b
이를 벡터화 없이 계산을 한다는 것은 w의 n개의 element와 x의 n개의 element를 모두 일일히 더한다는 것이다.

z = 0
for i in range(n):
	z += w[i] * x[i]
z += b

그리고 이걸 벡터화해서 계산한다는 것은 병렬적으로 연산을 한다는 뜻이다. 넘파이의 벡터화 명령어를 np.dot(w, x)를 표현해서 쓰면

z = np.dot(w, x) + b

이다. 이 경우, 단순히 식이 간결해지는 차원이 아니라, 실제 연산이 훨씬 빨라진다. 대규모 데이터를 처리할 때 for문을 가능한 줄이고 이렇게 벡터로서 연산을 하는 게 중요하다.

2 Numpy array의 연산

  • Numpy array의 경우 같은 크기의 배열끼리 연산을 하면 array-wise하게 연산이 된다. 그렇기에 파이썬보다 연산 처리 속도가 몇 십배 빠르다.
  • 물론 내부적인 메커니즘은 컴퓨터 공학의 기초에 대해 더 찾아보고 이해를 해야할 것 같다.
    특히 수업 시간에 배운 np.vectorize로, 일반 함수를 배열로 받아들일 수 있게 하는 함수는, 배열끼리 연산을 할 수 있게 만들지만 내부적으로는 반복문으로 처리가 되서 성능이 그렇게 빨라지지 않는다고 한다.
profile
일본에서 일하는 게임 기획자. 시시해서 죽어버리지 않게, 재밌고 의미 있는 컨텐츠에 관심 있습니다. 그 도구로 데이터, AI도 찝적댑니다.

0개의 댓글