728x90

 이번 14번째 강의에서는 합성곱 신경망 내부에서 시각화 하는 기술에 대해서 살펴보고, 이것들을 이해하여봅시다. 이번 강의 제목은 약간 의미가 잘못된 부분이 있는데, 오늘 다루고자 하는 두 주제는 하나는 신경망 안을 드려다 보는 기술로 데이터가 어떻게 학습되는지를 이해하는 것이고, 두 번째로는 신경망을 시각화하고 이해하는 다양한 기술들인 deep dream과 style transfer에 대해서 살펴보겠다.

 

 

 지난 강의에서는 어텐션에 대해서 다뤄보면셔, 어떻게 어텐션 메커니즘이 순환 신경망 모델에다가 추가시켜 매 타임스탭마다 입력의 다른 부분에 집중을 시키는지와 어텐션이라는 개념을 신경망 모델에서 레이어로 사용할수 있도록 일반화 시켜보았다. 그리고 새로운 레이어로 셀프 어텐션 레이어를 만들고, 이걸 트랜스포머라고 부르는 새 신경망 모델을 만드는데 사용하였다. 이 모델은 입력을 처리하는데 어텐션만 사용한다.

 

 우리는 그 동안 다양한 종류의 데이터들을 처리하는 신경망 모델을 만드는 방법에 대해서 배워왔습니다. 그래서 이미지를 처리하는 합성곱 신경망 모델을 어떻게 만드는지 알고있고, 순환 신경망 모델로 시퀀스를 처리할수 있는데다가 트랜스포머로 시퀀스나 데이터셋을 처리할수 있겠습니다.

 

 수업끝나고 많은 학생들이 물어보거나 이번 강의 내내, 시각 인식 작업에서 신경망 모델이 무엇을 학습했다고 우리가 어떻게 말할수 있는지에 대한 질문이 자주 있습니다. 이런 커다란 합성곱 신경망이 있고, 이 모델을 큰 데이터셋으로 학습시키면, 신경망 내부에 있는 특징들을 무엇을 찾고 있을까요?

 

 우리가 신경망 내부를 들여다보고, 서로다른 특징들이 서로다른 레이어들이 보고 있는 것을 얻어낸다면, 신경망 모델이 어떻게 실패하게 되는지 아니면 어떻게 동작하는지 아니면 어떡게 동작이 안되는지에 대해서 이해할수 있을거에요. 그래서 우린 사람들이 이런 깊은 신경망의 안을 들여다보기위해서 사용하는 방법들에 대해서 다뤄보고, 모델 내부에서 어떻게 돌아가는지 이해해봅시다.

 

 우선 말하자면 이들은 경험적으로 찾아낸 방법같은 것이지 내부에서 어떻게 돌아가는지 알아내는 아주 좋은 이론적인 방법은 아직 없습니다. 하지만 경험을 통해서 얻은 여러가지 방법들로 레이어가 어떻게 반응하는지에 대해 더 알수 있겠습니다.

 

 그런 방법들 중 하나는 신경망의 첫번째 레이어를 시각화하는 것입니다. 선형 분류기를 다시 떠올려보면, 선형 분류기는 각 클래스당 한 탬플릿으로 탬플릿들의 집합을 학습하는 개념이었는데, 선형 분류기로 각 클래스당 스코어 계산을 템플릿과 입력 이미지의 내적으로 간편하게 구하였습니다.

 

 이를 일반화 시키고, 신경망 그러니까 합성곱 신경망에다가 적용시켰습니다. (선형 분류기를 합성곱 신경망에다가 적용시킨) 이 개념이 순방향 연산과정에서 하는 템플릿 매칭입니다. 그래서 합성곱 신경망의 가장 첫번째 레이어에서는 여러 필터들을 학습시키는데, 이 필터들은 입력 이미지를 쭉 슬라이팅 시켜서 학습합니다. 필터는 입력 이미지의 모든 지점과 학습된 필터의 각 지점을 같이 내적 연산을 합니다.

 

 이 탬플릿 매칭 개념으로 학습하고 나면, 합성곱 신경망의 첫번째 레이어의 필터들을 rgb 이미지처럼 시각화함으로서 시각화를 할수있겠습니다. 이미지와 필터를 내적한다는 개념으로 필터를 이미지 처럼 시각화 할때, 그 필터를 시각화한 이미지는 그 필터랑 가장 강한 반응을 하겠습니다. 그래서 이런 필터들을 시각화해서, 신경망의 첫번째 레이어가 어떤 것을 찾는지 어느정도 이해할수 있겠습니다.

 

 지금 보는 슬라이드에서는 이미지분류를 위한 이미지넷 데이터셋으로 네 합성곱 신경망 모델을 선 학습 한 것에서 첫번째 합성곱 필터를 시각화 한 결과를 볼수 있겠습니다. 여기서 알아차릴수 있는 부분은 이런 신경망 아키텍처들이, 알렉스넷, resnet, densenet로 아키텍처는 꽤 다르지만, 첫번째 레이어에서 학습한 필터들은 아주 비슷하게 생긴걸 볼수 있습니다.

 

 또, 이런 필터들을 보면, 다른 방향의 에지를 찾는 에지 방향 필터도 있고, 반대되는 색상을 가지는 필터도 많이 있는걸 볼수 있습니다. 한번 이전에 봤던 humble and weasel의 포유류 시각 시스템 실험을 떠올려보면, 포유류의 시각 시스템은 시각장에서 우리가 보고 있는것에 대한 방향 에지를 찾는 셀을 가지고 있는데, 이는 합성곱 신경망 첫번째 레이어가 학습한 필터들과 비슷하다고 볼수 있고, 그래서 합성곱 신경망의 첫번째 레이어는 여러 종류의 방향 에지나 여러 종류의 색상들을 찾아내는거라고 이해할수 있겠습니다. 

 

 이 기법을 합성곱 신경망의 높은 레이어에다가 적용해도 되겠습니다. 하지만 정보가 그렇게 많진 않아요. 이 슬라이드를 보면 cfar 분류 데이터셋을 학습한 3층 합성곱 신경망의 가중치를 그냥 시각화 한걸 볼수 있는데, 첫번째 레이어를 시각화하면 이전 슬라이드에서 봤던게 나오지만 나머지 두 레이어를 시각화를 한 결과 이미지 여러 덩어리들이 나오게 됩니다.

 

 이는 이 작은 신경망 모델의 첫번째 레이어가 7 x 7 크기의 필터 16개를 가진다고하면, 두번째 레이어는 16개의 채널을 입력으로받아 20개의 필터로 만들다보니 출력한 20개의 합성곱 필터들은 16개의 입력 필터로 부터 구하지만, 16채널의 이미지는 채널수 때문에 RGB 이미지로 시각화하는데 좋지는 않아요.

 

 그래서 대신 출력된 각 20개의 필터 각각의 16개 필터들은 7 x 7 크기의 흑백 이미지로 시각화 시킬수 있습니다. 슬라이드에서 처럼 보기에는 불편할수 있지만 조금 더 고차원 합성곱 필터에서 공간적 구조를 조금 더 볼수 있겠습니다. 여기서 블롭 패턴이나 에지같은걸 찾을수도 있지만 RGB공간 상에서는 더이상 에지나 블롭을 찾을수는 없고, 이건 이전 합성곱 레이어로부터 생성된 특징 공간 상에서 블롭과 에지를 찾는 과정이라 할수 있겠습니다.

 

 이런 시각화 방법을 이용해서 고차 합성곱 필터가 어떻게 돌아가고 있는지 볼수는 있겠으나 이 필터들이 무엇을 찾는중인지 명확하게 이해하기는 어렵겠습니다. 그래서 합성곱 신경망의 다른 레이어에서 어떻게 되어가고 있는지 이해하려면 다른 방법들을 사용해야 해요.

 

 신경망을 이해하기위한 다른 방법중 하나는 중간 합성곱 레이어들을 무시하고, 마지막 완전 연결 계층에서 어떤 일이 일어나는지 살펴보는 방법이 있습니다. 알렉스넷을 떠올려보면, FC7 layer는 4096개의 특징들을 가지고 있어 이걸로 마지막 선형 변환을 해서 이미지넷 데이터셋에대한 1000개의 클래스들의 스코어를 구할수가 있습니다.

 

 여기서 우리가 해볼수 있는 일은 4096차원의 벡터로 표현되는걸서  이해하려고 하면되는데, 우리는 이미 학습된 알렉스넷이 어떤일을 하는지 알아내기 위한 방법은 입력 이미지를 4096차원의 벡터로 바꾸고, 선형 분류기를 적용하면 되는걸 알고있으니 이 과정에서 시각화를 통해 4096벡터에서 어떤 일이 일어나는지 이해할수 있겠습니다.

 

 그래서 정리하자면 훈련된 알렉스넷 모델 같은걸 준비해서, 이미지 테스트셋을 돌려 각 이미지에 대한 특징 벡터들을 계산하고 모은 다음에 다양한 기법들로 시각화 해볼수 있어요.

 

 

 우리가 해볼수 있는 간단한 방법으로 4096차원의 벡터에다가 최근접이웃을 적용해보는게 있습니다. 이전에 했던 두번째 과제에서 로 픽셀 데이터에 최근접 이웃 탐색을 사용했었는데, 왼쪽 그림이 픽셀 값을 이용한 최근점 탐색을한 예시에요. 그러면 실제 비슷한 클래스나 의미를 가진 무언가를 찾기 보다는 비슷한 픽셀들을 가진 이미지를 찾아냅니다.

 

  이번에는 이미지의 로 픽셀에다가 최근접 이웃을 적용하는게 아니라 알렉스넷으로 구한 4096차원의 벡터로 최근점 이웃 탐색을 하는것인데, 이 특징 공간에서 가장 가까운 이미지가 무엇인지 찾아낼수가 있어요. 중간에 있는 그림들이 이 최종 차원 벡터에다가 최근접 이웃으로 찾아낸 이미지 예시들입니다.

 

 이 예시의 두번째 줄에서 코끼리를 최근접 이웃 방법으로 구한 이미지들을 볼수 있어요. 하지만 탐색된 코끼리 이미지의 픽셀들은 매우 다를수 있어요. 왼쪽 면에 있는 코끼리 이미지를 사용해서 검색을 사용해보면, 이 이미지는 왼쪽에 회색 블롭 같은 형태를 가지고

 

...

 

(질문) 최근접 이웃을 이용해 어떻게 이미지를 탐색합니까?

 

 쿼리 이미지를 이미 학습된 알렉스 넷 분류기에 넣어서 4096차원의 벡터를 추출시키는데, 전체 테스트셋에 대해서 이 벡터들을 구한다음, 이 특징 벡터들을 L2 거리를 이용한 최근접 이웃 방법으로 탐색을 수행합니다. 이전에 본 방법들은 이 방법을 쓴건 아니지만 이렇게 구한 특징 공간으로 어떤 이미지인지 알수 있었습니다.

 

 

 

  특징 공간 상에서 어떤 일이 일어나는지 파악하기 위한 또 다른 방법으로 차원 축소 Dimensionality Reduction 알고리즘을 사용할수 있습니다. 여러분들이 알다시피 4096차원 벡터는 상당히 큰 차원이다보니 우리는 3차원 공간에서 살고있어 사람으로서 4096차원 특징 공간을 이해하기는 어렵겠습니다.

 

 우리가 해볼수 있는건 어떤 차원 축소 알고리즘을 사용해서 4096차원의 벡터를 우리가 이해할수 있는 2 혹은 3차원으로 축소시킬수가 있습니다. 다른 머신러닝 수업에서 봤을수도 있는데, 가장 간단한 알고리즘으로 주성분 분석 Principal Component Analysis가 있습니다. 이 방법은 선형 차원 축소 알고리즘으로 고차 특징 공간의 구조를 보존하길 원할때, 이 고차 벡터를 2차원으로 선형적으로 사영하는 차원 축소 알고리즘이라 할수 있습니다. 여러분이 차원 축소 알고리즘을 훈련 혹은 테스트셋으로 구한 4096차원의 벡터에 적용해서 2차원 공간 상에서 벡터를 시각화 할수 있습니디.

 

 딥러닝 논문에서 자주 나오는 유명한 차원 축소 알고리즘으로 t-SNE가 있습니다. 이 방법은 확률적으로 t분포를 따르는 이웃 임베딩을 구하는데(?) 자세한 사항은 넘어가고, 비선형 차원 축소 알고리즘으로 고차원의 벡터 집합을 입력으로 받아 가능한 기존의 구조를 유지하면서 2차원으로 사영시킵니다. 

 

 (중앙에 있는)이 시각화 결과는 10개의 mnist 숫자를 인식하도록 CNN 분류기를 학습했고, 분류기의 마지막 완전 연결 계층로부터 테스트셋 전체 이미지를 돌려 벡터들을 얻었습니다. 이 벡터는 4096차원인데, 테스트셋 각 이미지의 이 벡터를 t-sne 차원 축소 알고리즘을 적용해서 고차원의 임베딩 공간의 것을 2차원으로 축소시켜 테스트셋을 2차원 공간의 한 점으로 사영시켜 시각화하였습니다.

 

 다시 정리하면 이미지로부터 벡터를 계산한후 차원 축소 알고리즘으로 2차원 공간상에서의 위치를 구하였고, 이 그림에 있는 모든 각 점들은 2차원 공간에서의 숫자들의 위치이며, CNN이 학습한 전반적인 구조를 시각화 한 결과가 되겠습니다.

 

 여기서 놀라운 점은 10개의 숫자를 분류하였는데, 이 특징 공간 상에서 클러스터가 10개의 숫자에 맞게 10개로 나눠지는 경향이 나타납니다. 신경망을 학습시켜 얻은 특징 공간은 클래스를 인코딩 한것이지, 로 픽셀값이 아닙니다. 

 

  이런 비슷한 알고리즘을 숫자 인식 문제 말고 이미지 분류 문제에서도 적용할수 있습니다. 이미 비슷한 일들을 이미 해왔는데, 우선 이미지넷을 학습한 알렉스넷을 가지고와서, 테스트셋의 각 이미지의 4096차원 벡터를 추출해 냅시다. 그 다음 차원 축소 알고리즘을 적용하여 4096차원에서 2차원으로 가능한 구조를 보존하면서 줄입니다. 그러면 2차원 공간 상의 모든 점으로 사영되고, 이 2차원 공간상 점의 위치에다가 이미지를 시각화해봅시다.

 

 온라인에서 고해상도 버전도 볼수 있습니다. 일단 왼편의 것을 보면 이 이미지를 확대해보면 시멘틱 카테고리에따라 서로 다른영역들을 볼수 있습니다. 왼쪽이미지의 왼쪽 아래 코너를 확대해서 보면 여러가지 꽃을 볼수 있고, 오른쪽으로 평행하게 이동하면 강아지들이 있고, 오른쪽 위 코너로가면 파랗고 하얀것들을 볼수 있는데, 여기에는 배나 하늘 이미지 같은것들이 나옵니다.

 

  이런 시각화 방법으로 신경망이 어떻게 학습하였는지 이 공간상에서 시각적으로 볼수 있겠고, 학습된 특징 공간 상에서 어떤 종류의 이미지들이 서로서로 가까운지 볼수 있었습니다.

 

 이 방법을 해본 덕분에 신경망의 마지막 계층으로부터 벡터를 추출하고, 다른 종류의 연산을 해보는 방법을 고려해볼수도 있겠고, 신경망의 마지막 계층이 학습해낸 특징 공간을 다른 방법으로도 이해할수 있겠습니다.

 

 

 

 

300x250

+ Recent posts