@벡터화를 통해 m개의 전체 훈련 샘플에 대한 경사 계산(Gradient Computation) 하는 법
경사 계산을 위해 첫번째 샘플의 dz^(1)인 a^(1) - y^(1) 계산
dz^(2), …
dZ 정의
dz^(1), dz^(2) 부터 dz^(m)까지 모든 dz를 가로로 쌓은 것(stack horizontally)
(1,m) 행렬 혹은 m차원 열 벡터가 됨
A와 Y역시 가로로 쌓여있음
이 정의를 따른다면 dZ가 A - Y로 계산될 수 있다는 걸 알 수 있음
->첫번째 요소는 a^(1) - y^(1), 두번째 요소는 a^(2) - y^(2) 이렇게 계속되기 때문
따라서 한 줄의 코드로 이 모든 것을 동시에 계산 가능
위 식 까지가 지난 번에 했던 것(for문 하나 없애기)
@db에 대한 벡터화 구현
모든 dz를 더하고 m으로 나눠주는 것
db는 i가 1부터 m까지일 때 dz(i)의 합을 m으로 나눈 값
여기서 모든 dz는 열 벡터
파이썬에서는 1/m에 np.sum(dZ) 라고 씀
단순히 dZ를 가지고 이 함수를 호출하면 db를 반환
@dw
dw는 1/m에 X*dZ^T를 곱한 값
이 값은 1/m에 x^(1)부터 x^(m)이 가로로 쌓인 행렬 X를 곱하고
dZ^T는 dz^(1)부터 dz^(m)까지의 벡터가 됨
이 행렬과 벡터를 곱하면
1/m에 x^(1) dz^(1)부터 x^(m) dz^(m)을 모두 더한 값을 곱한 게 됨
이 벡터는 (m,1) 벡터이고, dw 값이 됨
벡터화된 도함수의 계산은 아래 식으로 for문 없이 변수의 갱신값을 계산할 수 있게 됨
@로지스틱 회귀 구현
-벡터화되지 않은 비효율적인 구현
-벡터화된 구현(without using for loop)
경사하강법 갱신은 w = w - αdw
b는 b = b - (학습률α)db 로 갱신됨
경사하강법을 반복하고 싶다면 반복 횟수에 따라 for문이 필요함
참고)
'CS > AI | CV' 카테고리의 다른 글
파이썬 넘파이 벡터 | A Note on Python/Numpy Vectors (0) | 2021.01.06 |
---|---|
파이썬 브로드캐스팅 | Broadcasting in Python (0) | 2021.01.05 |
로지스틱 회귀의 벡터화 | Vectorizing Logistic Regression (0) | 2021.01.05 |
벡터화 예제 | Vectorization Examples (0) | 2021.01.03 |
벡터화 | Vectorization (0) | 2021.01.03 |