Stanford CS231n(1/16) - Introduction to CS231
Stanford CS231n은 AI를 공부하는 연구자, 엔지니어라면 한번쯤 거쳐갈 법한 이름있는 강의입니다. 필자는 다소 늦었지만 (어쩌면 많이 늦었지만) 이 강의를 정주행하면서 여러가지 내용들을 정리하고 회고하고자 하는 목적으로 이 포스트 시리즈를 작성합니다.
Fei-Fei Li 교수 및 Justin Johnson, Serena Yeung 강사로 이루어진 CS231n 2017 Spring 강의를 16 Lectures까지 듣고 요약 하는 것이 시리즈의 대부분입니다. 그 밖에 코드를 밑단부터 직접 짜보고 내가 짠 코드의 결과와 강의의 의도가 얼마나 비슷하고 내가 잘 이해한 것인지 회고하는 등의 활동으로,
우리 블로그 “PIGNOSE Barn”(연구용 목적 블로그)에 맞게 블로그를 연재해보고자 합니다. 이 포스트에서는 간단한 시리즈 서두와 비록 첫 포스트임에도 1강에 대한 요약을 진행합니다.
포스트 시리즈를 준비하며
Stanford CS231n 포스트 시리즈는 다음을 염두하고 구성합니다.
독자는 AI 필드에 초심자로 가정합니다.
최대한 많은 링크들을 모든 단어에 하이퍼링크로 연결해둘 것입니다. 여러분은 클릭 한번으로 자세한 자료들을 볼 수 있습니다.
모든 포스트는 한글로 작성됩니다. 필요에 따라 원문을 첨부하지만 이는 번역문도 같이 첨부됩니다.
모르는 내용이 있으면 댓글로 달아주세요, 더 자세한 내용으로 업데이트 합니다.
래퍼런스
http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture1.pdf
http://cs231n.stanford.edu/
http://aikorea.org/cs231n/
https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk
이 시리즈에서 주로 다루는 것
인공 신경망(Neural network) 흔히 말하는 딥러닝(Deep learning)
특히 컨볼루션 뉴럴넷(CNN)
시리즈 한눈에 보기
Stanford CS231n(1/16) - 현재 보고있는 포스트
TBD
Lecture 1: Introduction to Convolutional Neural Networks for Visual Recognition
CS231n 코스가 게시될 때마다 수강생 또한 폭발적으로 늘고 있습니다. (저번에는 약 300명이었던 수강생이 이번에는 730명의 수강생으로 확인되었다고 합니다.) 적어도 CS231n은 그런 강의이고 이번 포스팅에서 다룰 Lecture들은 2017년 봄에 녹화된 내용으로 적어도 2년이라는 시간이 흘렀습니다. 다시말해 지금은 더 많은 개발자, 리서쳐, 심지어 다른 배경에 임하는 사람들도 학구열에 불타올라 더 많은 관심을 갖는 영역이 되었습니다.
오늘날에는 수 많은 시각적인 이미지 데이터들이 네트워크를 넘어 웹, 모바일에 전송되고 있고. 저스틴 존슨(Justin Johnson)이 흥미를 가지는 통계학적 예시로는 2015년 CISCO는 2017년에 네트웍의 대략 80%의 트래픽이 비디오가 될 것으로 예상하기도 했습니다. 따라서 이런 환경에서 대부분의 업계에서 이미지와 비디오등의 시작적 이미지 처리는 상당한 수준으로 요구되었지만 흥미로운점은 이런 시각적 데이터를 이해하는 것은 기존의 컴퓨터 과학에서는 그렇게 쉬운 일이 아니었습니다.
컴퓨터 비전은 학계적을 많은 부분과 엮여있는 분야입니다. 서로 다른 영역에서 서로 접근할 수 밖에 없습니다. 우리 또한 이런 상황에서 학계의 여러 분야를 접근하고 있습니다. 예를 들어 물리학은 물체와 광학, 물체의 형태등을 이해할 때 필요하고, 생물학이나 심리학의 경우 동물의 뇌를 이해하거나 동물이 어떻게 실체가 있는 물질을 보고 시각적으로 그를 이해하는지의 과정을 알기 위해 요구됩니다.
컴퓨터 비전에 어느정도 영향력이 있는 연구 중 하나인 Hubel & Wiesel, 1959의 연구에 따르면, 동물이 시각적인 정보를 어떻게 처리하는지 이해하기 위해, 전기 생리학(electrophysiology)을 사용하였습니다. 인간과 유사한 뇌의 시각 처리 메커니즘 분석을 위해 고양이의 뇌의 후방의 시각정보를 관장하는 피질에 전기신호 감지 장치를 삽입하였고, 어떤 시각적인 자극이 어떤 전기신호의 변화를 주는지를 감지하고 분석하였습니다. 그 중 가장 중요한 세포들은 어떤 방향으로 이동하는 물체의 가장자리의 패턴에 반응하는 가장 단순한 형태의 세포들이었습니다. 물론 그것보다 복잡한 세포들도 존재하겠지만, 여기서 발견한 중요한 요지는 시각 처리는 가장자리의 형태와 같은 가장 작은 구조에서 시작하고 뇌는 더 복잡한 현실의 시각 정보를 인지하기 까지 이런 간단한 정보를 복잡하게 쌓아 나간다는 것을 발견한 것입니다.
1987년 David Lowe는 면도기를 단순한 선분과 곡선으로 이루어진 정보로 부터 면도기를 구분할 수 있도록 시도했었습니다. 이런식으로 60, 70, 80년대 컴퓨터 비전에는 이런 문제들을 풀기 위한 많은 노력이 있었습니다. 그리고 솔직히 말하면 이런 물체를 인지하는 과제들은 굉장히 쉽지 않았습니다. 앞서 보여드린 이런 대담하고 야망있던 연구들은 그 연구에 비해서는 실제 우리가 사는세계에 무언가를 바꿀 수 있는 등이 아닌 몇 가지의 예시나 토이 프로젝트의 결과물만을 갖게 되었습니다.
사람들이 생각한 비전에 있는 문제들을 풀기 위해 있는 해법 중 하나로 물었던 중요한 질문은 “만약 물체 인식이 어렵다면 어쩌면 먼저 물체를 세그먼테이션 해보는 것은 어떨까?”였습니다.
이 과제는 이미지의 픽셀에서 중요한 의미를 가지는 영역등을 그룹으로 묶어줍니다. 우리는 아마 사람이라 불리는 그룹으로 픽셀을 모두 묶을 수는 없겠지만 배경으로 부터 사람에 포함되는 모든 픽셀을 추출할 수는 있습니다.
또한 “얼굴 인식(Face Detection)”이라 불리는 문제가 존재했습니다. 이 문제를 통해 앞선 많은 다른 문제들의 진보도 이루어냈습니다. 사람의 얼굴은 어쩌면 사람에게서 가장 중요한 물체일 것입니다. 1999년에서 2000으로 거슬러 올라가면 머신러닝 기술은, 특히 통계적 머신 러닝 기술은 속도가 붙기 시작합니다. Support Vector Machines, Boosting, Graphical models과 첫 신경망(Neural networks)의 물결도 포함해서 말입니다. 수많은 기여자를 만들어낸 한가지 특별한 시도는 Paul Viola가 시도했던 AdaBoost 알고리즘를 사용해 실시간 사용자의 얼굴을 인식하는 것이었습니다. 이런 작업은 2001년에 끝났으며 그 때는 굉장히 느린 컴퓨터 칩만이 존재했지만 그들은 실시간 처리 환경에서 얼굴 인식을 할 수 있었습니다. 이 논문이 나오고 5년 뒤인 2006년 후지필름은 실시간 얼굴 인식이 가능한 첫 카메라를 선보였습니다. 그렇게 기존 과학 연구는 실 세계로 너무 빠르게 전환이 되기 시작했습니다.
어떻게 물체 인식을 할 수 있는지 조금 더 따라가 보자면, 90년대에서 부터 2000년대 첫 10년간은 Feature based 물체 인식이 그 당시 가장 영향력 있는 방향이었습니다. 위 그림에서 SIFT라고도 불리는 David Lowe가 진행했던 과제를 살펴봅시다. Feature based 물체 인식의 아이디어는 간단하게도 이미지에서 보이는 모든 물체를 비교하고 매치하는 것입니다. 위 두개의 정지 표지판을 비교한다고 가정할 때 이미지 처리에서는 이 문제가 너무도 어렵다는게 느껴집니다. 아마도 카메라 각도, 물체의 가림 여부, 바라보는 방향이나, 광원등에 의한 문제일 듯 합니다. 하지만 관찰해보면 어떤 특징(Feature)들은 계속 진단을 유지할 수 있고 변화에도 불변성을 띄므로, 물체 인식은 이런 물체위의 주요 특징들을 판별하고 유사한 물체에서 이런 특징등을 찾는 테스크로 넘어가게 됩니다. 이런 작업은 모든 물체의 패턴을 매칭하는 것보다는 훨씬 문제를 쉽게 만들어줍니다.
앞서 말한 시도들은 사람을 인식하는 곳에서도 사용되기 시작했습니다. 어떻게 사람의 신체가 사실처럼 구성되고 그걸 판별할 수 있는지에 대한 작업들 수행되었고, 이런 작업 중에 일부는 소위 “Histogram of gradients”로 불리고 있고 다른 작업은 “Deformable part models”라고 불리고 있습니다.
60년, 70년, 80년대 부터 2000년 초의 10년간의 변화를 보면 크게 변한 한가지가 있는데 그건 바로 사진의 품질의 변화입니다. 인터넷과 디지털 카메라의 개선과 성장이 더 나은 데이터를 제공하고 컴퓨터 비전 학습으로 사용되어 왔습니다. 이런 변화로 인해 컴퓨터 비전 분야에서는 매우 중요한 근본 문제해결을 의해 거론하기 시작했습니다. 인식에서 풀어야 하는 가장 중요한 문제는 바로 물체 인식입니다. 2000년대 초기에 우리는 물체 인식의 현황을 측정할 수 있는 벤치마크 데이터셋을 만들기 시작했습니다. 그 중 가장 영향력 있는 벤치마크 데이터 셋 중 하나인 PASCAL Visual Object Challenge는 20 물체 클래스를 구성하고 있습니다. 그 중 3가지는 위 이미지에서도 보여지고 있습니다. (Train, Airplane, Person)
더 나아가 위 이미지에 나타난 세계에서 가장 큰 Visual Regnition Challenge 중 하나인 IMAGENET의 매년 이미지 인식의 에러율을 보면 보면 다행이도 에러율이 착실하게 내려가고 있는 것을 볼 수 있습니다. 여기에서 유심히 봐야할 부분은 2012년 입니다. 2010년과 2011년의 에러율에는 그렇게 큰 변화가 없었지만 2012년을 보면 약 9%의 의미있는 에러율의 가감을 보여주고 있습니다. 이 기간에 수상했던 알고리즘은 컨볼루션 신경망 모델(Convoultional Neural network model)이었습니다.
CS231n에서는 시각적 인식(Visual recognition)과 이미지 분류(Image classification)의 주요 문제들에 대해 다룹니다. 또한 물체 인식(Object detection), godehd qnsfb(Action classification), 이미지 명명법(Image captioning)과 같은 이미지 분류로 부터 오는 세부 문제에 대해서도 다루게 될 것입니다.
IMAGENET에서 우승했던 몇년간의 알고리즘들을 보면, 2010년 (강의에서는 2011년으로 표시됩니다.)에 Lin et al이 사용했던 방식을 볼 수 있습니다. 여전히 계층적인 구성을 가지고 있으며 다량의 레이어로 이루어져 있습니다. 여기서 알 수 있는 것은 이 방식은 여전히 계층적이고 가장자리 검출이 필요하며 이미지의 불변 영역의 개념을 가지고 있습니다.
하지만 2012년 토론토의 Jeff Hinton’s 그룹에서는 Alex Krizhevsky와 Ilya Sutskever는 함께 이런 상식들을 바꾸는 시도가 있었습니다. 7개로 구성 된 이 컨볼루션 신경망은 지금은 AlexNet으로 알려졌지만 당시에는 Supervision으로 불려졌습니다. 그 뒤로 매년 우승은 신경망으로 이루어져 있습니다. 그리고 트랜드는 이런 신경망의 구성을 더 깊게 만드는 것으로 변했습니다. 말했듯이 여러분이 세는 방식에 따라 다를 순 있지만 7-8개의 레이어로 구성된 AlexNet과는 다르게 2014년 (강의에서는 2015년으로 설명 함)에서 나온 구글의 GoogLeNet과 옥스포드의 VGG Net을 볼 때, 그때의 VGG는 19개의 레이어로 구성되어 있었습니다.
2015년에는 더 미쳐가기 시작합니다. 마이크로소프트의 Residual Network의 경우 152개의 레이어를 구성하고 있었죠.
여기서 알 수 있는 것은 CNN(컨볼루션 신경망)은 정말 2012년 당시 새로운 방식의 도약이었고, 많은 최적화와 튜닝 방식들에 대한 개선 노력도 있어 왔습니다. 그리고 마지막에 와서는 우리는 정말 깊이있게 딥러닝에 들어와 정확히 어떻게 모델들이 다르게 동작하는지에 대해서 이해할 수 있을 것입니다.
CNN에서 가장 기반이 되었던 작업 중의 하나였던 건, 사실은 90년대의 당시 Bell Labs에 있었던 Jan LeCun과 그의 공동 연구자들이었습니다. 1998년 해당 연구자들은 숫자를 구분하기 위한 CNN을 만들 어 낼 수 있었고, 이것을 배포하여 손글씨로 쓰여진 수표나 우체국을 위한 주소를 감지할 수 있기를 원했었습니다. 이 CNN 모델은 이미지로 부터 가져온 픽셀 데이터를 바탕으로 분류를 하여 어떤 것이 어떤 숫자로 되어 있는지, 혹은 문자로 되어 있는지 아니면 그 어떤 것도 아닌지를 분류할 수 있도록 하였습니다. 이 모델을 자세히 들여다보면 사실 AlexNet과 상당히 유사한 것을 볼 수 있습니다.
어떤 분들은 90년 대부터 있어왔던 알고리즘이 왜 갑자기 최근에 유명해지고 사용되기 시작했는지 궁금할 수도 있습니다.
첫번째로는 처리 능력으로 인해서입니다. 무어의 법칙 덕분에 오늘날의 컴퓨터 계산 성능은 굉장히 향상되었습니다. 또한 오늘날에 우리는 GPU의 출현을 맞이하게 되었습니다. GPU는 병렬 처리 연산을 놀라우리 만큼 훌륭하게 처리할 수 있는 완벽한 도구입니다. 이런 처리 능력의 개선들이 연구자로 하여금 더 거대한 아키텍처 구성을 할 수 있도록 길을 열어주었습니다.
두번째 핵심으로는 데이터가 있습니다. 이런 모델들은 데이터에 굉장한 갈증이 있고 그 때문에 우리는 수 많은 라벨링된 이미지를 준비해야 합니다. 당시 90년대에는 충분한 데이터가 없었고 아마존 Turk같은 도구도 없었고 인터넷도 지금 처럼 정말 대중적으로 사용되지 않았습니다. 때문에 다양하고 많은 양의 데이터를 구하는게 쉽지 않았습니다. 하지만 오늘날에는 PASCAL, ImageNet과 같은 비교적 큰 데이터셋이 있습니다.













