부스트캠프 ai tech 2주차에 배운 내용을 정리하는 글입니다. (핸즈온 머신러닝 2판 참고)
계산 그래프는 계산 과정을 그래프로 나타낸 것
계산 그래프의 장점은 국소적 계산 - 전체적인 계산이 복잡해도 각 노드는 자신과 관련된 계산만 하면 됨. 또한 중간 계산 결과를 노드에 저장할 수도 있음. → 역전파를 이용해 미분을 효율적으로 계산할 수 있음
Static graphs
: 그래프를 완전히 그린 다음 실행할 데이터를 주입함(define and run)Dynamic computation graph
: 실제 순방향 계산을 통해(실행을 하면서) 그래프 구조가 정의됨(define by run) → static graph에서는 그래프를 만들고 값을 넣어줘야 뭔가를 확인할 수 있음. dynamic graph에서는 중간중간 확인이 가능 → debug 할 때 dynamic graph가 더 편함수동 미분: 종이와 연필을 들고 직접 계산
유한 차분 근사
유한 차분 근사는 계산 결과가 정확하지 않고 함수(위 식에서는 )를 여러 번 호출해야 하기 때문에 비효율적임. 하지만 구현하기 간단하기 때문에 다른 미분 방식이 제대로 동작하는지 검사하는 데 좋음
전진 모드 자동 미분
라는 식의 , 를 구하고 싶음 → 입력에서 출력까지 계산 그래프를 따라 진행(전진 모드)
에 대한 편미분 순서: → →
에 대한 편미분 순서: 동일
→ 계산 그래프를 변수의 수만큼 돌려야 함 → 이러한 방식은 입력이 많고 출력이 적은 신경망의 경우 계산이 많아져서 비효율적임
참고) 노드를 편미분하는게 뭐임? 이걸 한다고 생각하면 됨
후진 모드 자동 미분
연쇄법칙(chain rule, 합성함수의 미분법)을 이용
output이 한개()이고 개의 값()을 거치는 계산 그래프일 때 와 빼고는 계산 과정이 동일 → 입력이 많고 출력이 적은 신경망의 경우 전진 모드 자동 미분보다 계산이 줄어듦