ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 5강 합성곱 신경망 (1/3, CNN 역사와 도입, history & introduction)
    AI 2021. 2. 17. 19:54

    오늘 수업 제목은 합성곱 신경망입니다.

    지난 시간 리뷰를 잠깐 해보죠. 신경망 (neural network)에 대해 얘기했고, 처음 몇 강의동안 얘기했던 선형 점수 함수 (score function)의 동작하는 예들을 우리가 어떻게 가질 수 있었는지 얘기했죠. 그리고 우리는 이것을 신경망으로 바꾸었습니다. 이 선형 계층을 서로 서로 쌓고 중간에 비선형성을 추가해서요. 또한 우리는 이것이 모드 (mode) 문제를 해결하는데 도움을 줄 수 가 있다는 것을 알았죠. 그래서 우리는 중간 템플릿을 학습할 수 있어서, 예를 들면, 빨간 차 대 (vs.) 노란 차 등 다른 종류의 차들을 찾을 수 있습니다. 그리고 이것들을 합쳐서 클래스에 대한 최종 점수 함수를 얻을 수 있었습니다.

    오늘은 합성곱 신경망 (convolutional neural network)에 대해 얘기를 할 건데요. 기본적으로는 같은 종류의 아이디어입니다. 그러나 이제 우리는 공간 구조를 유지하려는 합성곱 계층을 배울 겁니다.

    먼저 신경망의 역사에 대해서 좀 얘기해 보죠. 그리고 합성곱 신경망이 어떻게 개발되었는지에 대해서도요. 1957년으로 돌아가보면, 프랭크 로젠블랏이 마크 원 퍼셉트론 머신을 개발했습니다. 그것이 퍼셉트론이라고 불리는 알고리즘을 최초로 구현한 것이었습니다. 그건 점수함수를 가진 비슷한 아이디어였는데, 즉, W 곱하기 x 더하기 바이어스 (bias)를 하는 것이었죠. 그러나 출력은 0 이거나 1이었습니다. 그리고 이 경우 업데이트 룰 (rule)이 있었죠. 우리의 W를 위한 업데이트 룰인데, 역전파에서 보는 업데이트 룰과 비슷한 종류였습니다. 그러나 그때에는 원칙에 따른 역전파 기법이 없었습니다. 그냥 가중치를 취해서, 우리가 원한 타겟 방향으로 조정을 했습니다.

    1960년대에는 위드로와 호프가 아다린 (Adaline)과 마다린 (Madaline)을 개발했는데, 처음으로 이 선형 계층을 다계층 퍼셉트론 망으로 쌓아 올리게 되었습니다. 이것이 신경망 계층의 아이디어처럼 보이는 것이었지만, 역전파도 없었고, 어떤 원칙에 따른 훈련 방법은 없었습니다.

    처음으로 역전파가 소개된 것은 1986년 루멀하트 (Rumelhart)의 논문입니다. 여기서 우리는 우리에게 익숙한 이런 종류의 체인 룰 (chain rule)을 가진 방정식과 업데이트 룰을 볼 수 있습니다. 그래서 이것이 이런 종류의 망 아키텍처를 원칙을 가지고 훈련시키는 방법을 처음으로 볼 수 있는 논문입니다.

    그 이후에도 여전히 아주 큰 신경망으로 확장하지는 못했고, 새로운 것들이 나타나지 못하고 이런 종류의 망을 많이 쓰지 않는 시기가 있었습니다. 그런데 2000년대에 이것이 활기를 띄었고, 2006년에 제프 힌튼 (Hinton)과 러슬란 살라쿠디노프 (Salakhutdinov)의 논문이 나왔고, 우리가 깊은 신경망을 훈련시킬 수 있다는 것을 보여주었고, 그걸 효과적으로 할 수 있다는 것을 보여주었죠. 그러나 그건 신경망의 현대적인 이터레이션 (iteration)이 아니었습니다. 역전파를 위해서는 매우 조심스런 초기화를 필요로 했죠. 그래서 그들은 먼저 사전학습 단계를 가졌고, 엄격한 볼츠만 머신을 통해서 각각의 숨겨진 계층 (hidden layer)을 모델링했습니다. 반복적으로 이 계층들 각각을 훈련시켜서 초기화된 가중치를 얻게 되었습니다. 이 모든 숨겨진 계층들을 얻고 나면 그걸 이용해서 전체 망을 초기화하고 , 거기서부터 역전파와 파인 튜닝(fine tuning)을 했습니다.

    신경망을 사용해서 매우 강력한 결과를 얻기 시작하고 이런 종류의 망을 사용하는 것이 대유행이 된것은 대략 2012년입니다. 처음으로 음성인식에 대해서 가장 강력한 결과를 얻었는데, 그건 제프 힌턴의 연구실의 어쿠스틱 (acoustic) 모델링과 음성 인식에 대한 연구였습니다. 이미지 인식에 대해서는 2012년에 제프 힌턴의 연구실의 알렉스 키제프스키로 부터의 랜드마크 (landmark) 논문이 나왔습니다. 처음으로 합성곱 신경망 아키텍처를 도입해서, 이미지넷 (ImageNet) 분류에 있어서 매우 강력한 결과를 낼 수 있었습니다. 이미지넷, 이미지 분류의 벤치마크 (benchmark)에서 에러를 극적으로 줄였습니다. 그 이후에 콘브넷 (ConvNet)은 모든 종류의 응용에서 매우 광범위하게 받아들여졌습니다. 한발 물러나서 구체적으로 무엇이 합성곱 신경망이 나타나도록 했는지 보죠.

    우리가 1950년대로 돌아가보면, 휘벨과 위젤이 일련의 실험을 통해서 시각 피질에서 뉴런이 어떻게 동작하는지 이해하려고 했죠. 그들은 구체적으로는 고양이에 대해서 연구했습니다. 1강에서 이것에 대해 약간 얘기했는데, 기본적으로 이 실험에서 고양이 뇌에게 전극을 붙이고, 여러 시각적 자극을 주었습니다. 여러 종류의 엣지 (edge)와, 방향이 있는 엣지, 다양한 모양의 시각적 자극을 주고 이 자극에 대한 뉴런의 반응을 측정했습니다. 그리고나서 그들이 관찰할 수 있는 중요한 결론이 있었는데요.

    첫번째는 피질에서 일종의 지형적인 매핑이 있었다는 것입니다. 피질의 인접한 세포들은 시각적 필드 (visual field)의 인접한 영역을 나타냅니다. 예를 들어 오른쪽에서 보듯이, 만약 여러분이 일종의 공간적인 매핑을 하고 이것을 시각 피질로 매핑 (mapping)한다면, 더 주변에 해당하는 (pheriperal) 영역은 이 파란 영역입니다. 중심에서 떨어져 있죠. 그들은 또한 이 뉴런이 계층적 구조를 가지고 있다는 것을 발견했습니다.

    만약 여러분이 다양한 종류의 시각적 자극을 본다면,  초기의 계층에서 망막 절세포가 그 지점의 원형 영역처럼 보이는 것에 반응한다는 것을 발견했습니다. 게다가, 단순 세포가 있어서, 그 세포들은 빛 자극에 다양한 방향에 대해서 단순 방향을 가진 엣지에 반응을합니다. 더 나아가 보면, 그들은 이것들이 보다 복잡한 세포에 연결되어 있다는 것을 발견했고, 그것들은 움직임 뿐만 아니라 빛 방향에 반응합니다. 그리고 복잡도를 높히면, 과복합 세포 (hypercomplex cell)는 일종의 끝점 (end point)의 움직임에 반응합니다. 이제 여러분은 아마 코너와 방울 (blob)에 대한 아이디어를 갖게 될 것입니다.

    그 이후 1980년에 , 뉴로코그니트론이 망 아키텍처의 첫 예가 되었고, 휘벨과 위젤이 발견한 이 단순과 복합 세포의 아이디어를 갖고 있습니다. 이 경우 후쿠시마가 이것들을 단순과 복합 세포가 번갈아 나타나는 계층으로 놓았는데, 변경가능한 파라미터가 있는 단순 세포와 그 위에 단순세포로부터의 작은 변경에는 변하지 않도록 풀링 (pooling)을 수행하는 복합세포가 있었습니다. 이것은 80년대의 연구였습니다.

    1998년무렵 얀 르쿤 (LeCun)이 역전파와 경사기반 학습을 적용하여 합성곱 신경망을 훈련시키는 첫번째 예를 보여줬는데, 그건 문서인식을정말 잘했습니다. 구체적으로, 우편번호 숫자 인식을 매우 잘 할 수 있었습니다. 그래서 우체국에서 우편번호 인식에 널리 사용되었습니다. 그것을 넘어서는 더 복잡하고 도전적인 데이타로 확장할 수는 없었습니다. 숫자는 여전히 인식하기에는 꽤 단순하고 제한적인 집합이죠.

    2012년 알렉스 크리체프스키가 합성곱 신경망을 현대적인 형태로 제안했는데, 그의 망을 일상적으로 부르길 알렉스넷 (AlexNet)이라고 합니다. 그러나 이 망은 사실 얀르쿤이 다루었던 합성곱 신경망과 그렇게 많이 다르지 않습니다. 그것들은 더 크고 더 깊게 확장됐고, 가장 중요한 점은, GPU의 병렬 컴퓨팅 파워를 이용할 수 있게 되었다는 점과 이미지넷이나 웹 이미지 등, 이제 가용한 많은 양의 데이타를 이용할 수 있게 되었다는 겁니다.

    오늘날로 오면서 빠르게 콘브넷은 모든 곳에서 사용되고 있습니다. 우리는 알렉스 크리체프스키의 이미지넷의 초기 분류 결과를 알고 있는데, 그건 이미지 검색 (retrieval)을 매우 잘 했습니다. 예를 들어, 꽃을 꺼내려고 할때, 학습된 피쳐가 유사성 매칭을 하는데 정말 강력합니다.

    우리는 콘브넷을 감지를 위해서도 사용합니다. 그래서 우리는 어떤 이미지에서 버스, 보트, 등등을 영역을 찾아내고, 그 주위에 정확한 영역 상자를 그릴 수 있죠. 우리는 그 이상으로 더 깊이 들어가서 분리 (segmentation)을 할 수 있습니다. 이건 더 풍부한 작업인데, 단지 영역 상자를 그리는 것이 아니라 우리는 사실 모든 픽셀에 라벨링을 하는 겁니다. 나무, 사람 등의 윤곽선에 말입니다.

    이런 종류의 알고리즘이 자율주행 자동차같은데 쓰이고, 앞에서 말했듯이 GPU에 의해 가능합니다. 그건 병렬 처리가 가능해서 이 콘브넷을 효율적으로 훈련시키고 실행할 수 있죠. 우리는 자율주행차에서 사용할 임베디드 시스템 뿐만 아니라 현대적인 강력한 GPU도 있죠.

    콘브넷이 사용되는 다른 응용도 여기 볼 수 있습니다. 얼굴 인식에서 우리는 얼굴 이미지를 놓고, 이 사람이 누구인지의 우도 (likelihood)를 얻는 거죠. 콘브넷은 비디오에 적용되는데, 이건 비디오 네트워크의 예로 시간 (temporal) 정보와 이미지를 동시에 보고 비디오를 분류하는 겁니다.

    우리는 또한 자세 인식을 할 수 있습니다. 어꺠와 팔꿈치, 다른 관절들을 인식할 수 있어서 여기 우리의 멋진 조교 레인의 사진이 있는데, 다양한 전형적이지 않은 포즈를 하고 있죠. 그러나 콘브넷은 요즘 자세인식을 꽤 잘 할 수 있습니다. 이건 게임하는데 쓰입니다. 이 작업의 일부는 강화학습이고 더 깊은 강화학습이어서, 봤을 수도 있겠지만, 아타리 (Atrari) 게임과 고 (Go)를 하는 것을 봤다면, 콘브넷이 이 모든 것에서 중요한 부분을 맡고 있습니다.

    다른 응용들은, 의료 이미지의 해석과 진단이라던가 은하 분류, 거리 표지판 인식 등에 사용됩니다.

    고래를 인식하는데도 쓰이고, 이건 최근 캐글 챌린지 (kaggle challenge)였는데요. 우리는 또한 에어리얼 (aerial) 지도를 보고 지도에서 거리가 어디인지, 빌딩이 어딨는지를 그려내고 분류할 수 있습니다.

    분류 감지의 인식을 넘어서, 이미지 캡셔닝 (image captioning)도 할 수 있습니다. 이미지가 주어지면, 우리는 이미지에 무엇이 있는지에 대해 문장으로 기술하는 겁니다. 수업에서 나중에 좀 더 들여다 보겠습니다.

    또한 우리는 신경망으로 할 수 있는 진짜 멋진 예술 작품 (art work) 종류도 있죠. 왼쪽은 딥드림 (deep dream)의 예인데, 이미지를 받아들여서 이미지 내의 다양한 종류의 물체와 개념을 환각적으로 보이게 하는거죠. 또한 신경망 스타일의 작업이 있는데, 이미지를 받아서 이 이미지를 특정 예술가나 작품의 스타일을 사용하여 다시 렌더링 (rendering)합니다. 예를 들면, 오른쪽엔 반 고흐가 있고, 별이 빛나는 밤에죠. 그걸 사용해서 우리의 원래 이미지를 그 스타일로 그리는 겁니다. 저스틴 (Justin)은 여기에 굉장히 많이 연구했어요. 여러분이 관심이 있다면, 이 이미지들은 그의 코드로 만들어진거니까, 가서 얘기해 보세요.

    댓글

Designed by Tistory.