자동 미분

원준식·2022년 9월 29일
0

부스트캠프 ai tech 2주차에 배운 내용을 정리하는 글입니다. (핸즈온 머신러닝 2판 참고)



  • 계산 그래프(computational graph)란?

계산 그래프는 계산 과정을 그래프로 나타낸 것



  • 계산 그래프를 사용하는 이유는?

계산 그래프의 장점은 국소적 계산 - 전체적인 계산이 복잡해도 각 노드는 자신과 관련된 계산만 하면 됨. 또한 중간 계산 결과를 노드에 저장할 수도 있음. → 역전파를 이용해 미분을 효율적으로 계산할 수 있음



  • TensorFlow와 PyTorch의 대표적인 차이
    • 계산 그래프 표현 방식의 차이
      • TensorFlow - Static graphs: 그래프를 완전히 그린 다음 실행할 데이터를 주입함(define and run)
      • PyTorch - Dynamic computation graph: 실제 순방향 계산을 통해(실행을 하면서) 그래프 구조가 정의됨(define by run) → static graph에서는 그래프를 만들고 값을 넣어줘야 뭔가를 확인할 수 있음. dynamic graph에서는 중간중간 확인이 가능 → debug 할 때 dynamic graph가 더 편함
    • TensorFlow는 google의 도구이기 때문에 production, cloud, multi-GPU 등의 부분에서 강점을 가짐



  • 미분은 어떻게?
    • 미분의 여러 방식
    1. 수동 미분: 종이와 연필을 들고 직접 계산

    2. 유한 차분 근사

      h(x)=limϵ>0h(x0+ϵ)h(x0)ϵh'(x) = \lim_{\epsilon -> 0}\frac{h(x_0+\epsilon)-h(x_0)}{\epsilon}

      유한 차분 근사는 계산 결과가 정확하지 않고 함수(위 식에서는 h(x)h(x))를 여러 번 호출해야 하기 때문에 비효율적임. 하지만 구현하기 간단하기 때문에 다른 미분 방식이 제대로 동작하는지 검사하는 데 좋음

    3. 전진 모드 자동 미분

      g(x,y)=5+xyg(x, y) = 5 + x*y라는 식의 gx\frac{\partial g}{\partial x}, gy\frac{\partial g}{\partial y}를 구하고 싶음 → 입력에서 출력까지 계산 그래프를 따라 진행(전진 모드)

      xx에 대한 편미분 순서: 5,x,y5, x, y*++

      yy에 대한 편미분 순서: 동일

      → 계산 그래프를 변수의 수만큼 돌려야 함 → 이러한 방식은 입력이 많고 출력이 적은 신경망의 경우 계산이 많아져서 비효율적임

      참고) * 노드를 편미분하는게 뭐임? uvx\frac{\partial{u*v}}{\partial x} 이걸 한다고 생각하면 됨

    4. 후진 모드 자동 미분

      연쇄법칙(chain rule, 합성함수의 미분법)을 이용

      gx=ztntntn1tn1tn2...t1x\frac{\partial g}{\partial x} = \frac{\partial z}{\partial t_n} \frac{\partial t_n}{\partial t_{n-1}} \frac{\partial t_{n-1}}{\partial t_{n-2}}... \frac{\partial t_1}{\partial x}
      gy=ztntntn1tn1tn2...t1y\frac{\partial g}{\partial y} = \frac{\partial z}{\partial t_n} \frac{\partial t_n}{\partial t_{n-1}} \frac{\partial t_{n-1}}{\partial t_{n-2}}... \frac{\partial t_1}{\partial y}

      output이 한개(gg)이고 nn개의 값(t1,,tnt_1, …, t_n)을 거치는 계산 그래프일 때 t1x\frac{\partial t_1}{\partial x}t1y\frac{\partial t_1}{\partial y} 빼고는 계산 과정이 동일 → 입력이 많고 출력이 적은 신경망의 경우 전진 모드 자동 미분보다 계산이 줄어듦


자동 미분은 계산 그래프를 그려서 생각하면 생각하면 더 이해가 잘 됨

0개의 댓글