5.1. CNN
1 2 3
4 5 6
7 8 9
대충 이런 3x3 이미지가 있다고 하자
원래 CNN을 쓰지 않는 경우는 저걸 1차원으로 flatten해서 123456789로 만든다. 그런데 만약 5 6 8 9에 하나의 그림이 그려져 있다면? 여기서 공간적인 구조가 무시되어 5 6 8 9간 연관성이 학습되지 않는다.
이를 방지하기 위해 만든게 바로 Convolution층.
레이어 구조
아래와 같은 5개 층으로 구성된다.
일반적인 퍼셉트론과 비교하면 앞에 컨볼루션-풀링 작업이 추가되어있다.
- 입력층 - 이미지의 높이, 너비, 그리고 채널(컬러인지 흑백인지)을 입력받음.
- 컨볼루션층 - 쉽게 말하면 이미지의 사이즈를 줄여 중요한 정보만 남겨놓는 층. NxN 필터(커널이라고 부름)를 이미지에 대고 스트라이드만큼 건너뛰며 이동해 정보를 받는다.
보통 자주 활용되는 커널은 3x3 / 5x5, 스트라이드는 이미지에 따라 다르겠지만 난 개인적으로 1 선호하는 편
2 4
6 8
맨 위 이미지에 바로 위의 커널을 스트라이드 1로 하면 진행 방식은 이렇다.
- 필터를 맨 왼쪽 위에 포개고 그 상태에서 이미지 값x필터 값 을 다 더함
(1x2)+(2x4)+(4x6)+(5x8) = 74
- 필터 한 칸 이동 - 이러면 2 3 5 6이 필터 안에 들어온다.
- 다시 같은 작업 실행 - (2x2)+(3x4)+(5x6)+(6x8)=94
- 한 줄을 다 했으니 한칸 아래로 내려가서 왼쪽부터 1~3단계 다시 실행 - (4x2)+(5x4)+(7x6)+(8x8)=134, (5x2)+(6x4)+(8x6)+(9x8)=154
- 위의 결과를 다 모으면 이런 2x2가 나온다.
74 94
134 154
이건 필터가 1개일 때의 내용이고, 실제로는 필터가 2개 이상일 때도 많기 때문에 최종 결과는 3차원으로 나온다.
따라서 컨볼루션 층에서 입력 내용은 다음과 같다.
- 입력 데이터 - 이미지 높이/길이/채널
- 하이퍼파라미터 - 필터 개수/크기/스트라이드/패딩(최대 길이 맞춤)
- 출력 데이터 - 크기가 2차원으로는 줄어들고 z축으로는 필터 수만큼 늘어난 이미지 데이터
패딩은 한번도 설명한 적이 없는데, 이건 자연어 데이터에서 CNN을 쓸 때 사용됨. 문장별로 길이가 다르니까, 최대 문장 길이에 맞춰 데이터 사이즈를 맞추는 부분이다.
- 풀링
앞 단계들을 거쳐 나온 줄어든 데이터에서, 이게 차원은 여러 차원일테니까 각각에 대해 적용한다.
풀링은 데이터를 다운샘플링 시키는 작업. 중요 데이터만 뽑아서 새로운 데이터를 만든다.
자주 사용되는 건 2종류인데,
- 맥스 풀링 - 최대값 고르기
- 평균 풀링 - 평균값 계산해 그거 고르기
이러면 층이 여러개라도 충분하다.
- FFN, 출력층
퍼셉트론 통과시켜서 소프트맥스-크로스엔트로피 쓰면 끝
1D / 2D / 3D
필터가 움직일 수 있는 방향과 출력 형태에 따라 분류하는 기준.
보통 보면 레이어를 Conv2D라고 표시하는데 이게 그거다.
- 1D - 좌우로만 이동, 출력도 1차원 배열
- 2D - 상하좌우로 이동, 출력도 2차원 배열
- 3D - 상하좌우+앞뒤로 이동, 출력도 3차원 배열
- 2D인데 3D 입력받는 경우 - 이러면 필터 z축 길이가 3D 데이터의 z축 길이와 같다.
- 1x1 컨볼루션 - 3D로 입력, 이것도 z축 길이는 필터와 데이터가 같음, 이걸 통과시키는 경우 연산량이 감소되는 효과가 있음
5.3. Transfer Learning
요즘 CV나 NLP 분야의 주류 학습 데이터는 웹 데이터다.
그만큼 크기가 커서, 한방에 학습시키려면 며칠씩은 기본으로 잡아먹는다.
이런 현실적인 어려움을 해결한 것이 바로 Transfer Learning = 전이 학습.
용어는 거창한데 사실 그 본질은 거대 데이터셋을 pretraining한 다른 모델의 가중치만 빼오는 날먹 그 자체
-
특성 추출 기법 - pretrained 모델을 불러와 마지막 FFN-출력층 부분만 따로 만드는 방법
-
파인 튜닝 - 추가 데이터로 가중치를 현재 나의 상황에 맞게 재조정하는 방법
데이터셋이 큰 경우 모델 전체를 다시 학습시켜도 좋고, 데이터가 pretrain된 데이터와 유사하면 데이터 분류기와 FFN-출력층 부분만 바꿔도 됨. 크기가 작으면 CNN 층의 일부를 재학습시키는것도 고려해야 한다.