gumgood blog

Stanford의 CS231n은 컴퓨터 비전(computer vision) 분야에서에서 가장 인기있는 강의 중 하나다. 그 중에서도 신경망(neural network), 특히 CNN과 관련된 부분에 초점을 맞추고 있다.

감사하게도 강의 녹화본이 공개되어 있다. 이번에 강의를 들어보면서 컴퓨터 비전으로서의 딥러닝에 대한 깊은 이해를 해보려고 한다. 순서상 CS229 머신러닝(machine learning) 강의를 먼저 듣는게 좋지만 어느정도 알고 있는 내용이라 나중에 한 번 더 듣는 걸로 해야겠다.

컴퓨터 비전의 역사 (A brief history of computer vision)

강의에서는 컴퓨터 비전 분야에서 CNN까지 발전하게 된 기존 연구들의 역사와 그 흐름을 소개하고 있다. 따로 요약하진 않겠지만 개인적으로 인상깊게 들었기 때문에 넘기지 않고 듣길 잘했다.

강의 철학 (Philosophy)

이 강의에서는 배울 알고리즘에 대해 매우 깊은 수준에서 이해를 목표로한다. 예를 들어, 신경망을 결합할 때 알고리즘이 어떻게 작동하는지, 그러한 아키텍처 결정이 신경망 훈련과 테스트에 어떤 영향을 미치게되는지 등을 이해해야 한다.

과제를 통한 과정 전반에 걸쳐 나만의 CNN을 바닥부터 Pyhton으로 구현한다. 전체 forward/backward passes를 구현할 것이고, 결국에는 완전히 스스로 전체 CNN 모델을 구현하게 될 것이다. 물론 이건 연습이기도 하고 보통 CNN을 바닥부터 구현하지는 않기 때문에 Caffe, Tensorflow, PyTorch와 같은 SOTA 소프트웨어 툴 또한 다룬다. 강의 과제나 프로젝트를 진행하면서 접하게 될 것이다.

선수학습내용

위 내용을 다 알지 못해도 강의를 듣는데 큰 지장은 없지만, 따라잡으려면 더 노력해야 한다고 한다.

  • 모든 프로그래밍 과제는 Python(+ numpy)으로 진행되기 때문에 이를 잘 다룰 줄 알아야 한다.
    • 추후 강의에서 C++로 작성된 여러 딥러닝 라이브러리를 살펴볼 건데 C/C++코드가 친숙하다면 패키지들이 어떻게 동작하는지 이해하는데 유용할 것이다.
  • 미분과 선형대수에 대한 지식이 있어야 한다.
  • CS131 또는 CS231a 수준의 컴퓨터 비전 지식이 있어야 한다.
  • CS229 수준의 머신러닝 배경지식이 있어야 한다.
    • 손실함수를 정의하고 미분과 경사 하강법을 통한 성능 최적화를 하게 될 것이다.

부교재로는 Deep Learning(저자: E.N. Goodfellow, Yoshua Bengio, Aaron Courville)을 쓴다. 이 외에도 많은 정보와 링크가 강의 홈페이지에 있으니 함께 참고해야겠다.