Coursera에서 Deep Learning Specialization을 듣고 있습니다. Andrew Ng교수님이 쉽게 잘 설명해주시기도 하고, 강의 자체가 어렵지 않습니다. 그런데, 총 5개의 강좌로 구성되어 있는데, 그 중 3개 강좌만 제공되고 있습니다. 그마저도 다 들은 터라, 새로운 좋은 강의가 없나 찾아보았습니다. 엄청난 추천을 받고 필수 코스처럼 느껴지는 강좌가 있었는데, 바로 CS231n - Convolutional Neural Network for Computer Vision가 되겠습니다. 이제 막 첫번째 과제를 끝냈는데, 그간 수업을 들으며 느낀 점을 정리해 보았습니다.

강의 준비

Standford는 원래 저런 건지, 아니면 유독 cs231n이 그런건지는 알 수 없지만, 강의 준비하는 수준이 엄청 납니다. slide도 좋지만, notes라고 해서 수업 중에 이해하기 어려운 것들에 대해서 PDF로 다시 정리해 놓은 자료들이 있습니다. 영어로 진행되니, 잠깐 정신을 놓으면 5~10분은 그냥 지나가서 제가 이해를 못했을 수도 있습니다만, 강의 중에 궁금했거나 알아야만 하는 부분은 PDF로 정리해서 제공되니 너무 좋았습니다. 물론, 이 정리라는게 전과처럼 요약해주는 것이 아니라, 특정 개념을 확장하는데 단초가 되는 개념을 정리해 주는 편이었습니다. 예를 들어, backpropagation을 구하는데, vertorize를 하기 위해서는 matrix differential을 알고 있어야만 합니다. 그럼, PDF로 matrix differential을 제공해 주는 것이죠. 처음에는 대소롭지 않게 지나갔고, 사실 친철하다고만 생각했습니다. 그런데, 나중에 과제를 진행하면서 왜 그 자료들을 올렸는지 알 수 있었습니다.

과제

과제가 어렵습니다. 제가 수업을 잘 따라가지 못한 탓도 있지만, 정말 ‘헉’소리가 날 정도로 시간도 많이 걸리고 난이도도 있었습니다. 한 문제, 한 문제가 결코 간단하게 풀리지 않았습니다. 그럴 수 밖에 없는게, 수업 시간에 세세하게 구현을 다루지 않기 떄문입니다. 구현에 대한 이야기는 수업 시간에 나오지 않고, 개념에 대한 이야기만 진행합니다. 구현과 같이 세세한 내용이 없기 때문에, 각자가 세세한 수준까지 도달해야 하는 것이죠. 그렇기 때문에, 위의 자료들을 다시 찾아볼 수 밖에 없었습니다.

특히나, 마지막 문제는 평생 잊지 못할 것 같은데, 문제는 CIFAR-10을 가지고 2-layers Nueral Network를 구성해서 정확도를 52%이상을 만드는 것이었습니다. 점수는 48% 이하면 감정이며, 52%이상이면 1%에 1점을 준다고 되어 있었습니다. 저는 정말 호기롭게, (왜냐하면 Andrew Ng교수님의 수업을 이미 들었기 때문에 제법 카드가 있었습니다.) 52%는 당연히 뛰어 넘을 수 있다고 믿었습니다. 그런데 이게 왠일인지, 수업 시간에 배우지 않은 최적화 기법을 써도, 정확도는 좀 처럼50%의 벽을 넘지 못했습니다.

과정

숙제를 2주를 넘게 잡고 있으니, 숙제와 제가 하나가 된 것 같은 기분이 들었습니다. 그리고, Deep Learing(DL)을 한다는게 이런 거구나… 이거 이따위로 하다가는 굶어 죽을 수도 있겠구나… 하지만, 그러한 과정 속에서 이해가 한층 높아 간다고 할까나, 아니면 교수진이 생각의 물꼬를 만들려고 한다는 생각이 들었습니다. 사실, 이렇게 어렵게 하지 않아도 되고, tensorflowcaffe등을 사용한다면 마주치지 않을 저수준의 작업이기는 합니다. 작년까지 강의를 했고 cs231n을 만든 Andrej Karpathy가 DL를 가장 익히는 쉬운 방법은 자신만의 DL library를 만드는 것이라 했으니, 좋은 공부가 아닌가 합니다.

현재의 저로서는 욕심이라면 이 수업을 끝까지 완주하는 것이겠죠. 그리고 DL을 공부하시는 분이라면 한번 살펴보시면 좋을 것 같습니다. 물론, 저 같은 초보를 위한 강의이기는 합니다. 완주하고 포스트 올리도록 할께요.