728x90

 

 

 

 

 이전에 본 7개의 단계를 통해서 GPU 자원이 많지 않더라도 좋은 모델을 학습시킬수가 있겠다. 이후에 더 다뤄볼 내용으로 모델을 학습한 이후에 어떤 일들을 할수 있느냐인데,

 

 최종 테스트셋 성능을 약간이라도 좋게 할수 있는 방법들 중 하나로 모델 앙상블이 있는데, 어떤 문제를 다루던지 간에 상관없이 성능을 개선 시킬수가 있다. 이 방법은 독립적으로 여러개의 모델을 여유 되는 만큼 학습시키고, 그들 중 가장 테스트 성능이 좋으걸 사용하는게 아니라 각 모델들의 예측 결과를 모아서 평균을 사용한다.

 

 이미지 분류 같은 문제의 경우에는 각 모델이 출력한 각 카테고리별 예측 확률을 평균을 구해서 사용하면 되겠다. 이런 식으로 여러개의 서로 다른 모델들의 조합, 앙상블을 사용해서 기존의 최종 테스트 성능에서 1 ~ 2 % 성능 개선을 할수 있다.

 

 그래서 이 방법은 꽤 일반적으로 사용할수 있어, 어떤 모델 아키텍처인지, 모델이 얼마나 많은지, 어떤 문제를 풀고자하는지 상관없이 더 좋은 성능을 얻을수가 있어서 사람들이 자주 사용하는 방법이겠다.

 

정리

여러 모델을 이용한 모델 앙상블 기법

1. 여러 모델들을 학습 후 예측 결과의 평균을 최종 예측 값으로 사용한다.

2. 어떤 문제이던 간에, 어떤 모델이던 간에 상관없이 유용하게 사용할 수 있다.

 

 

 독립적인 여러 모델들을 학습시키는것 대신 사용할수 있는 다른 방법으로는 한 모델을 학습하는 동안 여러 체크 포인트를 저장하고, 해당 체크포인트 당시 모델의 결과들을 평균을 구해서 성능을 개선시킬수가 있다.

 

 이 방법의 트릭은 주기를 보이는 효과적인 학습률 스케줄링 방법이라고 할수 있는데, 학습률 스케줄링이 주기적으로 동작하다보니 처음에는 높게 시작하다가 떨어지고, 다시 높게 시작하다가 떨어지고, 이 과정을 여러 차례 반복한다. 그렇게 하면 각 체크포인트들에서 모델의 가중치 값들은 학습률 스케줄링에서 해당 지점이 가장 낮을때의 것을 사용하는게 되겠다.

 

정리

한 모델 여러 스냅샷을 이용한 모델 앙상블 기법

1. 주기를 보이는 학습률 스케줄링 방법을 사용한다.

2. (해당 주기에서) 훈련 비용이 최저가 되는 = 학습률이 최저가 되는 시점의/체크 포인트 모델을 저장한다.

3. 각 체크 포인트 모델로 예측한 결과의 평균치를 저장한다.

 

 

 

 

 

 다른 방법으로는 학습 하는 동안의 모델 가중치들의 이동 평균을 구하여 사용하는 것으로 이걸 폴리야크 평균 Polyak이라고 부른다. 이 방법은 배치 정규화 같은 큰 생성 모델들에서 흔하게 사용되어왔는데, 가지고 있는 데이터들의 평균과 분산의 평균들을 지속적으로 계속 구하고, 테스트 때 (배치 정규화 때 처럼) 이렇게 구한 평균과 표준 편차를 사용하는 방법이다.

 

 모델 가중치를 갱신할때 한 에폭에서 경사 하강법으로 구한 가중치 갱신치를 사용하는게 아니라 그동한 지속적으로 구한 모델의 가중치 평균을 사용한다고 할수 있겠다.

 

 이 방법을 통해서 훈련 과정에서 매 반복때마다 발생하는 변동을 스무딩시킬수가 있겠다. 지금까지 모델을 학습시키는 동안 매 반복때마다 비용의 변동이 크게 나오지만, 매 반복 마다 발생하는 노이즈를 평균을 통해서 줄일수가 있었다.

 

정리

가중치 이동 평균 사용하기

1. 폴리 야크 평균 : 훈련 과정에서 이동 평균을 계속 계산하고, 테스트 과정에서 사용.

2. 폴리 야크 평균으로 학습 과정에 발생하는 노이즈를 제거할수가 있다.

 

 

 지금까지 모델 앙상블에 대한 다양한 방법들을 살펴봤는데, 이 방법을 기존에 사용하려고 했던 작업에서 더 나아가서 학습 시킨 모델가지고 다른 작업을 해야할 경우도 있는데, 이런 방법들이 최근 몇년간 컴퓨터 비전 분야에서 메인스트림이 된 효괴적인 방법들로 전이 학습 transfer learning의 기반이 되었다.

 

 

 

 전이 학습에 대해서 시작하기 위해서 우선 CNN에 대한 미신으로 사람들이 모델을 학습시켜서 잘 쓰려면 아주 큰 훈련셋이 필요하다고 말하곤한다.

 

 하지만 이 생각은 잘못된 것인데, 이 잘못된 생각을 깨야 하며 전이 학습을 통해서 수 많은 문제들을 딥러닝으로 풀수 있다. 아주 큰 훈련셋을 사용할수 없는 경우가 많이 있으며, 이런 이유로 전이 학습이 컴퓨터 비전 분야에서 메인 스트림이 되었다.

 

 기본 개념은 위 그림과 같은데, 우선 첫 번째 단계에서는 이미지넷 이나 다른 큰 이미지 분류 데이터 셋으로 합성곱 신경망 모델을 학습 시키자. 이 과정에서 우리가 지금까지 봐왔던 다양한 기법들을 활용해도 좋다.  두 번째 단계에서는 이미지넷 데이터셋의 분류 성능 보다는 더 작은 데이터셋을 이용한 분류 문제나 아예 다른 문제를 다루고자 할 수도 있겠다.

 

 이 그림을 보면 이미지넷 데이터로 학습 시킨 모델을 가지고 와서 마지막 완전 연결 계층을 제거하였는데, 이 계층은 알렉스 넷이라고 한다면 4096 차원 특징들을 받아 1000 차원의 클래스 스코어에 대한 벡터를 출력하는 계층으로 어느 카테고리에 속하는지를 판별하는데 사용되었었다.

 

 하지만 이 마지막 계층을 신경망에서 제거 하고 나면 뒤에서 두 번째 계층의 출력인 4096 차원의 벡터를 입력된 이미지들의 특징 표현같은걸로 사용할 수 있다. 다시 말하면 이 학습된 모델을 통해서 이미지에 대한 특징 벡터를 추출할수가 있다.

 

 2013 ~ 2014년 당시 사람들은 이런 간단한 방법을 통해서 아주 많은 컴퓨터 비전 문제들을 더 좋은 성능으로 풀수 있게 되었다. 예를 들자면 칼텍 101이라고 부르는 데이터셋을 사용한 경우인데 이 데이터셋은 101 카테고리 뿐이며, 이미지넷보다 훨신 작은 크기로 이루어져 있다.

 

 우측 그림에서 x축은 하나의 카테고리를 학습하는데 사용한 데이터 개수, y축은 칼텍 101 데이터셋에서 분류 성능을 보여주고 있다. 여기서 빨간색 커브는 딥러닝 방법 이전에 사용되던 특징 추출 파이프 라인을 통한 방법을 이용한 결과이다.

 

 파란색과 녹색 커브는 이미지넷을 학습한 알렉스넷을 가지고 와서 알렉스넷 마지막 두번째 계층으로 구한 특징 벡터로 로지스틱 회귀와 SVM으로 학습 시킨 결과를 보여주고 있다. 선학습된 모델로부터 얻은 4096 차원 특징 벡터로 로지스틱 회귀와 서포트 벡터 머신 같은 단순 선형 모델을 학습 시켰다고 할수 있겠다.

 

 미리 학습 시킨 모델로 추출한 특징 벡터로 선형 모델을 학습 시킨 덕분에, 성능을 크게 향상 시킬수 있었으며 각 클래스당 데이터가 5 ~ 10개 뿐인 경우에도 꽤 높은 성능을 얻을수가 있었다.

 

  그래서 이 방법이 흔하게 사용되고 있고, 이미지넷 선 학습된 모델을 특징 추출기로 사용한다면, 훈련 데이터가 많지 않은 경우라 해도 다양한 문제들을 좋은 성능으로 풀수 있다.

 

 이런 결과가 나오는건 칼텍 101 뿐만 그런게 아니며,  새 분류 데이터 셋을 사용한 경우에도 그런데 우측 그림에세 DPD와 POOF라는 새 종류를 잘 인식할 수 있도록 튜닝한 모델과, 알렉스넷으로 얻은 특징으로 간단하게 로지스틱 회귀로 학습한 경우를 보여주고 있다. 

 

 비교한 결과 알렉스넷 특징 + 로지스틱 회귀이 이전에 새를 잘 분류할수 있도록 튜닝된 방법들보다 더 좋은 성능을 보이고 있고, 

 알렉스넷 특징과 이전의 방법을 같이 사용 한 경우 훨씬 뛰어난 성능을 얻을 수가 있었다. 전이 학습은 칼텍 101 이미지 나 새 데이터 뿐만 아니라

 

 

  수 많은 이미지 분류 문제에 관한 데이터셋에도 사용할수가 있다. 이 그림에 이미지넷 추출 특징을 다양한 선형 모델들로 학습한 벤치마크, 성능 평가치들이 있는데, 객체, 장면, 새, 꽃, 사람 특징, 물체 특징에 관한 모든 데이터셋에서 이전 방법들보다 더 좋은 성능을 보이고 있다.

 

 여기서 놀라운 건 파란색 막대, 각 데이터셋의 이전에 사용되던 방법들이 독립적으로 특정 데이터 셋에 맞게 튜닝되었지만, 간단하게 선학습 모델로부터 얻은 특징들을 사용하여 단순 선형 회귀 모델로 학습시키기만 해도 알아서 미세 조정 되고 이전의 다른 방법들 보다 더 좋은 결과를 얻을수 있다는 점이다.

 

 

 

 선학습모델으로 특징을 추출해 사용하는건 이미지 분류 뿐만이 아니라 컴퓨터 비전 관련 수많은 분야에서 사용할수가 있는데, 동일 논문에서 이미지 검색 작업을 위한 데이터셋에 대해서도 성능 평가를 했었다. 이 방법들이 어떻게 동작하는지는 중요하지 않지만, 예를 들어 옥스포드에 있는 한 건물 이미지가 주어지면 데이터셋에서 시간이나 촬영 각도가 다르더라도 같은 건물의 이미지를 찾는 문제이다.

 

 이런 이미지 탐색은 구글에 이미지 업로드 해서 비슷한 이미지를 탐색하는것과 비슷한것이기도한데, 여기에도 선학습모델로 특징을 추출해서 간단하게 최근접 이웃 같은 방법을 이용해서 이미지 검색 문제를 수행할수가 있다.  특징 추출 층 위에다가 단순 최근접 이웃을 사용함으로서 이전의 방법들보다 훨씬 개선된 성능을 얻을수가 있었다.

 

 간단하게 특징 벡터를 추출해서 사용하는 이런 방법들이 전이 학습의 간단한 예시들이고, 선형 모델이나 다른 탐색 베이스라인들을 사용할수도 있다.

 

 

중간 질문

 이 논문에서는 원본 이미지를 데이터 증강을 사용해서 특징 벡터를 추출을 하였는데, 이 파이프라인에서 상당히 중요하다는걸 알아냈다. 데이터 증강 방법으로 랜덤 스케일로 자르거나 뒤집거나 하는건 이전 장에서 이야기 했으니 넘어가자.

 

 

 

 지금까지 선학습된 신경망을 사용하는 간단한 방법들을 보았고, 특징 벡터를 추출해서 다른 알고리즘에 입력시켜 사용했다. 하지만 우리가 가진 데이터셋이 약간 더 크지만, 더 나은 성능을 얻고자 한다면 미세 조정 fine tuning을 해야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250

+ Recent posts