@벡터화를 통해 보다 효율적으로 계산하는 법
m개의 훈련 샘플이 있을 때 처음 샘플을 예측하려면 위를 계산해야 함
z를 계산하고, 활성값, y의 예측값도 계산해야 함
두 번째 훈련 샘플을 예측하려면 위 값을 계산해야 함
… m개의 훈련 샘플이 있다면 이것을 m번 해야 함
@정방향 전파 단계 실행 위해(m개의 훈련 샘플에 대해 이 예측값(a)를 계산하는데) for문 없이 계산하는 법
X는 훈련 입력을 열로 쌓은 행렬
@z^(1), z^(2), z^(3) 등을 한 단계 혹은 한 줄의 코드로 계산하는 법
행 백터이기도 한 (1, m) 행렬 만들기
여기에 z^(1), z^(2), …, z^(m)까지 동시에 계산할 것
이것은 w^T*X와 b로 이루어진 벡터의 합으로 표현될 수 있음
b로 이루어진 것은 (1, m) 벡터 혹은 (1, m) 행렬
w^T에 x^(1), x^(2), …, x^(m)로 이루어진 행렬을 곱하면
w^T는 행 벡터
첫번째 항은 w^T*x(1)이 되고 두번째 항은 w^T*x(2), w^T*x(m)까지 이어짐
여기에 b로 이루어진 행 벡터를 더하면 각 요소에 b를 더하게 됨
결국 (1, m) 벡터를 얻게 됨
위의 정의를 살펴보면 첫번째 요소는 z^(1)의 정의와 일치하고 두번째 요소는 z^(2)의 정의와 일치하고 so on~
훈련 샘플인 소문자 x변수를 가로로 쌓았을 때 대문자 X변수를 얻은 것처럼
소문자 z변수를 가로로 쌓으면 대문자 Z변수를 얻음
대문자 Z는 소문자 z^(1)부터 z^(m)까지를 포함하는 (1, m) 행렬이 됨
이 값을 계산하는 Numpy 명령어는 Z = np.dot(np.transpose(W), X) + b
파이썬에서 미묘한 점은 b는 하나의 수(row number)라는 것
((1,1) 행렬이라고도 할 수 있는 실수)
이 벡터와 이 실수를 더한다면 파이썬은 실수 b를 자동으로 (1, m)행 벡터로 바꿔줌
->파이썬의 '브로드캐스팅(Broadcasting)'
@a^(1) 부터 a^(m)을 동시에 계산하는 법
소문자 x와 z를 가로로 쌓아서 대문자 X와 Z를 얻은 것처럼
소문자 a를 가로로 쌓아 대문자 A라는 새로운 변수를 정의해보기
소문자 z와 a를 하나씩 계산하기 위해 m개의 훈련 샘플을 순환(for문 이용)하는 대신
한 줄의 코드로 모든 z를 동시에 계산하고, 적절한 σ의 구현으로 한 줄의 코드로 모든 a를 동시에 계산 가능
참고)
'CS > AI | CV' 카테고리의 다른 글
파이썬 브로드캐스팅 | Broadcasting in Python (0) | 2021.01.05 |
---|---|
로지스틱 회귀의 경사 계산 벡터화 | Vectorizing Logistic Regression's Gradient Computation (0) | 2021.01.05 |
벡터화 예제 | Vectorization Examples (0) | 2021.01.03 |
벡터화 | Vectorization (0) | 2021.01.03 |
m개 샘플의 경사하강법 | Gradient Descent on m Examples (0) | 2021.01.01 |