@벡터화(Vectorization)
-쉽게 말해, 코드에서 for문을 없애는 일종의 예술
실제 딥러닝을 할 때 큰 데이터 세트를 학습시킬 때가 많음
따라서 코드가 빠르게 실행되는 게 중요함
그렇지 않으면 큰 데이터 세트를 학습시킬 때 코드 실행 시간이 길어지고, 결과를 내기까지 오래 기다려야 함
딥러닝 시대에서 벡터화할 수 있는 능력은 중요한 기술이 되었음
벡터화 되지 않은 구현일 때에는 w^T*x를 계산하기 위해
위와 같이 구현해야 했음
->느림
그에 반해, 벡터화된 구현은 w^T*x를 직접 계산함
파이썬이나 Numpy에서 사용하는 명령어는 np.dot(w,x)
위 방법(벡터화된 구현)이 훨씬 빠름
실습코드)
import numpy as np
import time # Time how long the operation takes
# Create million-dimensional array of random numbers
a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time() # Set current time
c = np.dot(a, b)
toc = time.time()
print(c)
# Expressed in milliseconds
print("Vectorized version: " + str(1000 * (toc - tic)) + "ms")
c = 0
tic = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc = time.time()
print(c)
# Non-Vectorized version
print("for loop: " + str(1000*(toc-tic)) + "ms")
벡터화된 버전은 0.9밀리초가 걸렸지만 벡터화되지 않은 버전은 576밀리초가 걸린 것을 볼 수 있음
->코드를 벡터화하면 딥러닝 알고리즘 구현 시 결과를 훨씬 빨리 얻을 수 있음
@SIMD(Single Instruction Multiple Data)
-병렬 프로세서의 한 종류
-하나의 명령어로 여러 개의 값을 동시에 계산하는 방식
-벡터화 연산을 가능케 함
->for문으로 하나의 값을 연산하는 것보다 벡터로 만들어 한번에 연산하는 게 더 효율적
GPU는 SIMD 계산을 엄청 잘 하지만 CPU도 그렇게 나쁘진 않음
될 수 있는 한 for문을 쓰지 않아야 함
참고)
'CS > AI | CV' 카테고리의 다른 글
로지스틱 회귀의 벡터화 | Vectorizing Logistic Regression (0) | 2021.01.05 |
---|---|
벡터화 예제 | Vectorization Examples (0) | 2021.01.03 |
m개 샘플의 경사하강법 | Gradient Descent on m Examples (0) | 2021.01.01 |
로지스틱 회귀 경사하강법 | Logistic Regression Gradient Descent (0) | 2021.01.01 |
계산 그래프 | Computation Graph (0) | 2020.12.31 |