보통 합성곱 신경망(CNN) 같은 경우 이미지를 사용하여 훈련시킨다. 그렇기 때문에 딥러닝 모델을 훈련시키려면 방대한 양의 데이터가 필요하고 데이터셋을 구하는 것도 쉽지 않다. 그렇기 때문에 이러한 문제점을 해결하고자 만든 것이 바로 전이 학습이다. 예를 들면 Imagenet( 영상 인식 기술의 평가하는 이미지 셋으로 클래스 2만개와 이미지 총 1419만 7122장으로 되어있다. )과 같은 방대한 양의 이미지를 사용하여 훈련된 모델의 가중치를 가져와 사용하려는 모델에 맞게 어느 정도 보정하여 사용하는 것을 의미한다. 그렇기 때문에 충분하지 못한 이미지 데이터로도 어느 정도의 성능을 내는 기법이다.
전이 학습은 두 가지의 방식이 있다.
1. 특성 추출 기법
특성 추출 기법은 사전 훈련된 모델을 가져와 학습할 때 마지막 완전연결층(이미지의 카테고리를 결정하는 부분)만 학습시키고 나머지 계층들은 학습되지 않도록 하는 방식이다. 이 방식은 합성곱층(가중치 고정)과 완전연결층(데이터 분류기) 두 부분으로 나눠진다. 쉽게 얘기해 사전 훈련된 모델의 결과값을 데이터 분류기에 훈련시키는 방식이다.
간단한 실습을 통해 알아보도록 하자!
from tensorflow.keras import Model
from tensorflow.keras.models improt Sequential
from tensorflow.keras.layers import Dense, GlobalMaxPool2D, GlobalAveragePooling2D
from tensorflow.keras.applications import ResNet50 # 사전 학습된 ResNet을 사용하기 위해 라이브러리 호출
# 모델 호출
resnet = ResNet50(include_top=True, # 네트워크 상단에 완전연결층을 포함할지 여부
weights="imagenet", # 가중치
input_tensor=None, # 입력 데이터의 텐서
input_shape=None, # 입력 이미지에 대한 텐서 크기
pooling=None,
classes=1000 # 클래스 수, weights="imagenet"로 사용하려면 클래스는 1000으로 설정
# 다른 값을 원하면 "None"으로 설정
resnet.trainable = False
model = Sequential([resnet,
Dense(2, activation='sigmoid')]) # 시그모이드가 포함된 밀집층 추가
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
라이브러리로 모델을 가져올 수도 있고 텐서플로 허브를 통해 모델을 불러오는 방법도 존재한다.
( TensorFlow Hub : https://www.tensorflow.org/hub?hl=ko )
2. 미세 조정 기법 (Fine-Tuning)
미세 조정 기법은 특성 추출 기법에서 더 나아가 사전 훈련된 모델과 합섭곱층, 데이터 분류기의 가중치를 업데이트하여 훈련시키는 방식입니다. 다시 말해 새로운 이미지 데이터를 사용하여 사전 학습된 모델을 목적에 맞게 재학습시키거나 학습된 가중치의 일부를 재학습시키는 방식입니다.
네트워크 미세 조정 과정 중 특성 추출에 비해 연산량이 많기 때문에 GPU 사용이 권장된다.
또한 미세 조정 기법은 현재 가지고 있는 데이터셋의 크기와 사전 훈련 모델에 따라 전략을 세울 수 있다.
- 데이터셋이 크고 사전 훈련된 모델과 유사성이 작을 경우 : 모델 전체를 재학습시킨다
- 데이터셋이 크고 사전 훈련된 모델과 유사성이 큰 경우: 합성곱층의 뒷부분과 데이터 분류기를 학습시킨다. 데이터셋이 유사하기 때문에 강한 특징이 나타나는 합성곱층의 뒷부분만 재학습시키더라도 최적의 성능을 낼 수 있을 것이다.
- 데이터셋이 작고 사전 훈련된 모델과 유사성이 작을 경우: 합성곱층의 일부분과 데이터 분류기를 학습시킨다. 이 경우 일부 계층만 미세 조정 기법을 적용한다고 해도 효과가 없을 수 있기 때문에 합성곱층 중 어디를 학습해야 할지 적당히 설정해줘야 한다.
- 데이터셋이 작고 사전 훈련된 모델과 유사성이 큰 경우 : 데이터 분류기만 학습시킨다. 과적합의 위험이 있긴 때문이다.
미제 조정은 파라미터를 너무 많이 수정하게 되면 과적합이 발생할 수 있기 때문에 미세한 업데이트가 필요하다.
'프로그래밍 > 머신러닝 & 딥러닝' 카테고리의 다른 글
LeNet-5 (Architecture 및 클래스 구현) (0) | 2022.10.24 |
---|---|
합성곱 신경망 (Convolutional Neural Network, CNN) 개념 및 구조 (0) | 2022.10.21 |
tensorflow를 이용한 기초 딥러닝 (0) | 2022.07.06 |
비지도 학습 핵심 알고리즘 (0) | 2021.09.02 |
지도 학습 핵심 알고리즘 (0) | 2021.08.26 |