cs230_lec2_C1W2

Updated:

(From : deeplearningai https://www.youtube.com/watch?time_continue=386&v=AwQHqWyHRpU)

이중 분류

  • X와 Y의 Notation 정의
    • $X.shape=(n_x,m)$
    • $Y.shape=(1,m)$
      • $n_x$는 x데이터 총 태그 수
      • m은 해당 데이터 수

로지스틱 회귀

  • 예측하는 $\hat{y}$는 확률값임
  • 시그모이드를 통해 결과를 0~1사이 값으로 출력

로지스틱 회귀의 Cost Function

  • 로지스틱 회귀에서 제곱 오차(MSE)는 Gradient Descent를 못하므로 못씀
  • 비슷한 역활을 하면서 Convex인 손실 함수를 정의
  • 이러한 손실 함수를 쓰는 이유
    • y=1일 때 : $L(y,\hat{y})=-log(\hat{y})$ 이므로 $\hat{y}$는 크게 측정됨
    • y=0일 때 : $L(y,\hat{y})=-log(1-\hat{y})$ 이므로 $\hat{y}$는 작게 측정됨
  • Cost function
    • $J(w,b)=\frac{1}{m}\sum_{i=1}^m L(\hat{y}^{i},y^{i})$

Gradient descent

  • 앞서서 공부한 Cost function을 최소화시키는 w,b 찾기
  • step을 반복해서 값이 감소하는 곳으로 이동하는 것
  • $\frac{\alpha J(w,b)}{\alpha x}=dw$ 로 정의
  • := 는 업데이트 한다는 뜻

Derivative

  • 함수의 도함수(Derivative)는 함수의 기울기를 의미할 뿐이고, 위치에 따라서 기울기는 달라질 수 있다.

Logistic Regression Computation Graph

  • 신경망 계산은 전방향 전파, 역방향 전파로 나누어짐
    • 전방향 경사를 통해 출력값 결정
    • 역방향 전파를 통해 도함수 값을 구함
  • 연쇄 법칙(chain rule) 이용
    • For 문 쓰는게 데이터 수가 많아지면 문제가 되고 느리기 때문에 Vectorization이 나오게 되었다.

Vectorization (중요)

  • for 문 계산보다 계산이 빠름
  • SIMD(Single Instruction Multiple Data)는 CPU,GPU에 있어서 병렬 연산이 가능하게 됨
  • GPU는 SIMD 계산을 잘하지만 CPU도 GPU보다는 부족하지만 잘 할 수 있다.
  • 예)
    • np.log(v) : 모두 로그
    • np.abs(v) : 모두 abs
    • np.maximum(v,0)
    • v**2 : 제곱값
    • 1/v : 역
  • (1) Forward propagation 시 성분 모두 벡터화 해서 계산하기
    • np.dot(w.T,x) = $w^Tx$
  • (2) Back propagation loop에서 for문 없애기
    • $db=\frac{1}{m}\sum_{i=1}^mdz^{(i)}=\frac{1}{m}np.sum(z)$
    • $dw=\frac{1}{m}Xdz^T$

Broadcasting

  • 속도를 빠르게 하는 또다른 Matrix중 하나
    • A.sum(axis=0) -> 세로축으로 더하란 말
    • A.sum(axis=1) -> 가로축으로 더하란 말
    • ex) percentage = 100*A/cal.reshape(1,A))
      • reshape는 상수 시간이 걸려서 호출이 저렴함
      • (3,4) 벡터를 (1,4) 벡터로 나눔.
    • Broadcasting 다른 예시

    • 즉 (m,n) 과 (m,1)의 연산[+,-,/,*] 또는 (1,n)와의 연산을 (m,n)으로 바로 하게 해준다
  • Matlab/Octave에서 쓰이는 bsxfun 은 비슷하지만 다른 기능으로 쓰인다.
  • 파이썬에 익숙하지 않으면 찾기 힘든 오류가 잘 발생
  • !실수하기 쉬운 것부분 1! a=np.random.randn(5) 라고 하면
    • a.shape=(5,)로 나옴.
      • A^T는 A와 같게 나옴 조심
      • a.T는 (1,5) 벡터로 출력됨
      • np.dot(A,A^T)는 자료의 외적이 나오게 됨
      • a= np.random.randn(5,1) 처럼 랭크 1 배열 뽑기 말기뽑기
    • (5,) 와 같은 rank 1 array 쓰지 말자

Leave a comment