CNN의 첫 번째 단계는 convolution이다.
특히 입력 이미지의 영역을 수신을 담당하는 뉴런에 맵핑하는 변환이 일어난다.
컨볼루션 레이어는 아래의 그림처럼 시각화할 수 있다.
빨간 박스는 원래 입력 이미지를 나타내고 파란 박스는 해당하는 네트워크 뉴런을 나타낸다.
각 박스 안의 작은 박스는 선택된 영역이 어떤 과정을 거쳐서 처리가 되는지 볼 수 있다.
여러가지 필터를 통과해서 하나의 이미지가 여러 개의 특징으로 나눠지는 것이다.
이를 수용영역(receptive field)라고 부른다.
첫 번째 이미지에서 볼 수 있듯이 CNN은 여러 라운드의 컨볼루션, 풀링(필터를 통과하여 정보를 효과적으로 줄이는 디지털 신호 처리 기술), 그리고 결국에는 완전히 연결된 신경망과 출력 레이어를 가질 수 있다. CNN의 일반적인 출력 계층은 분류 또는 감지 문제를 지향한다.
CNN은 이미지 분류의 큰 획을 그은 방법론이다.
이전 이미지 학습 기술에 비해 이미지 전처리(자르기, 센터리, 정규화 등)가 상대적으로 거의 필요하지 않고 이미지의 모든 종류의 일반적인 문제(이동, 조명 등)에 대해 견고하기 때문이다.
실제로 최첨단 이미지 분류 CNN을 훈련하는 것은 계산적으로 중요하지 않다고 한다. 또한 전이학습을 통해 사전학습된 모델을 사용할 수 있다는 것이다.
전이학습이란 기존(사용자의 목적과는 다른) 데이터로 학습된 네트워크를 재사용이 가능하도록하는 라이브러리라고 할 수 있다.
전이학습을 통해 많은 시간이 걸리며, GPU를 통해 학습된 모델을 다운받아 내 작업에 활용할 수 있다. 사전학습이 되었다는 것은 모델이 가중치와 편향이 포함하여 학습을 한 것이기 때문에 사전학습된 모델의 일부를재사용하는 것을 transfer learning이라고 표현한다. 아래의 그림처럼 일부만 사용해서 활용할 수도 있지만 전체를 다 재학습할 수도 있다. 교육 데이터를 적게 사용하고, 교육 속도가 빠르며, 더 잘 일반화하는 모델을 가질 수 있다.
전이학습의 과정은 아래처럼 정리할 수 있다.
1. 이전에 학습한 모델에서 파라미터를 포함한 레이어를 가져온다.
2. 향후 교육 과정 중에 포함된 정보가 손상되지 않도록 해당 정보를 동결(freeze, 가중치를 업데이트하지 않음)한다.
3. 동결된 층 위에 새로운 층(학습 가능한 층)을 더한다.
출력층(output)의 수를 조절하여 새로운 데이터셋에서 원하는 예측방법(분류, 회귀 등)으로 전환하는 방법을 배울 수 있게 된다.
4. 새로운 데이터셋에서 새로 추가한 계층만을 학습한다.
만약 기존 레이어를 동결하지 않으면, 학습된 레이어에서 가져온 가중치까지 학습하게 된다. 이 경우 학습할 것이 많기 때문에 시간이 오래 걸린다.
전이학습을 사용하면 중요한 벤치마크 모델을 적절하게 선택할 수 있다.
이미지 분류기 ResNet50를 통해 살펴보고자 한다.
ResNet은 CNN의 일종으로 기존의 sequential 모델과 달리 skipped connection이 있는 모델이다. 이 연결을 통해 더 깊은 층을 만들더라도 학습이 가능해진다.