티스토리 뷰

벡터화는 코드에서 for문을 없애는 일종의 예술과 같다. 

for문을 사용하여 큰 데이터 세트를 학습시킨다면,

코드 실행시간이 길어지고, 결과를 내기까지 오래 기다려야 한다.

 

딥러닝 시대에서 벡터화할 수 있는 능력은 중요한 기술이다. 그럼 벡터화에 대해서 알아보자.

 

 

 

벡터화(vectorization)란?

로지스틱 회귀를 계산한다고 하자.

 

벡터화 되지 않은 구현 -> \( w^{T} x \) 를 계산하기 위해, for문을 이용해 \(n_{x}\) 만큼 계산해야한다.

벡터화 구현 -> numpy의 내장함수인 np.dot() 사용으로 굉장히 빠르게 계산할 수 있다.

 

신경망이나 로지스틱 회귀를 프로그래밍할 때 기억해야 할 것은 가능한 한 for문을 사용하지 않는 것이다.

필요한 값을 계산할 때 내장함수나 다른 방법을 쓸 수 있다면 for문을 쓰는 것보다 대부분 빠를 것이다.

 

다른 예시를 봐보자.

행렬 A와 벡터 v의 곱인 벡터 u를 계산하고 싶다면 다음과 같다.

 

 

오른쪽 벡터화된 버전은 두 개의 for문을 없애므로 훨씬 빠르다.

 

또다른 예시이다. 

벡터 v의 모든 원소에 지수 연산을 하고 싶다고 하면, 다음과 같다.

 

오른쪽 구현이 for 문이 필요한 구현보다 훨씬 빠르다.

 

따라서, 컴퓨터의 계산 효율성을 위해서 가능하면, "for loop"을 피하는 것이 좋다.

자주 쓰는 numpy 함수에는 다음과 같은 것들이 있다.

  • np.log()
  • np.abs()
  • np.maximum()
  • **
  • zeros

브로드캐스팅(broadcasting)이란?

 

브로드캐스팅은 파이썬 코드 실행시간을 줄일 수 있는 또 다른 기법이다.

numpy에서 서로 다른 모양(shape)의 배열도 일정 조건을 만족하면 연산을 할 수 있다. 우리는 이걸 브로드캐스팅이라고 한다.

 

예시를 보면 더 잘 이해가 갈 것이다.

 

브로드캐스팅의 조건은 다음과 같다.

1. 원소가 하나인 배열은 어떤 배열이나 브로드캐스팅 가능

2. 하나의 배열이 1차원 배열인 경우, 브로드캐스팅 가능

3. 차원의 짝이 맞을때 브로드 캐스팅이 가능

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함