티스토리 뷰

▶전이학습(Transfer Learning)
오늘은 전이학습(Transfer Learning)에 대해서 알아보려고 합니다 :)
1. 등장하게 된 이유
- 근래에 개발된 CNN 모델들을 설명하면서 ImageNet 데이터셋을 기반으로 하는 대회들이 있는데 이 대회들을 통해 다양한 네트워크 모델들이 개발되었음
- 이때 사용된 데이터셋(ILSVRC 2012 기준)
- 1,000개의 classes, 125만개의 이미지
- 다 해서 겅의 150GB의 데이터
- 이러한 이미지 데이터셋을 바탕으로 여러 CNN 모델들이 나온 것임

여기서 우리가 생각해 보아야 할 것
- 우리가 직접 이런 이미지를 분류한다고 했을 때
- 충분히 실행시킬 수 있는 하드웨어적인 성능을 뒷받침해줄 수 있는 환경이 되어있는가?
- class에 포함되어 있지 않은 이미지가 주어졌을 때, 우리는 어떻게 이미지 분류를 할 것인가?
- 만약 우리가 VGG16 과 같은 모델을 활용을 해서 할 수는 있겠지만
- 만약에 이미지 데이터셋이 충분하지 못하면 학습을 하는 데에 어려움이 있을 수 있음
위 내용을 정리를 해서 전이학습이 등장하게 된 이유를 정리를 해 보면 아래와 같습니다.
ⓛ 충분히 학습할 수 있는 환경이 부족해서
② 새로운 이미지 데이터 세트를 분류하고 싶어서
→ 기존에 있는 네크워크 모델을 복사해서 사용해 보면 어떨까 생각해 볼 수 있음❗
그래서 나온 개념이 "Transfer learning"
간단한 전이학습 설명
- 기존 ImageNet 데이터셋을 기반으로 학습된 VGG16 같은 모델에 feature들이 있다고 할 때
- 이 feature들을 활용을 해서
- 새로운 이미지 데이터셋이 있을 때
- 모델을 활용해서 분류를 할 수 있지는 않을까❗

전이학습은 '한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식'이다!
이게 어떻게 가능한건데..?
- 네트워크가 다양한 이미지의 보편적인 특징 혹은 Feature들을 학습했기 때문
- 일반적으로 네트워크가 깊어질수록 서로 다른 종류의 feature들을 학습
- 낮은 layer에서 학습되는 feature : low-level feature
- 깊은 layer에서 학습되는 feature: high-level feature
- low-level feature의 예
- 이미지의 색이나 경계(edge)
- high-level feature의 예
- 심화된 객체의 패턴이나 형태

- 네트워크가 이러한 특징을 학습하기 위해서는 대량의 데이터셋이 필요
- 가장 대표적으로 ImageNet ❗❗
728x90
2. Transfer Learning
Transfer learning
- 학습된 데이터의 지식을 타겟으로하는 데이터셋에 전이를 해서 적용
- 만약에 의자와 관련된 분류를 하고 싶다고 할 때
- 하필 왜 의자..? 냐면 ImageNet 데이터셋에는 의자와 관련된 정보가 많이 없기 떄문에 예시를 들었습니다🙂
- 그러면 의자와 관련된 그림이 주어졌을 때 의자라고 분류하기 힘들겠죠?
- 기존 ImageNet 데이터셋을 기반으로 한 모던한 CNN 모델을 가지고 활용하게 되면 바로 문제 해결 가능
- 기존에 학습된 모델이 일반적인 이미지 feature들과 관련된 특징들을 충분히 파악하고 있음
- 예를 들어 기존 이미지로 학습을 함으로써, edge나 texture, shape 이런 것을
- pre-trained 모델이 가지고 있음!
- 우리는 이러한 정보들과 새롭게 구성된 의자와 관련된 이미지 데이터셋을 같이 활용해서 학습을 하게 되면
- 좀더 효율적이고 효과적일 수 있다는 발상!
+ pre-trained model ( 사전훈련 모델 )
- 일반적으로 대규모 이미지 분류 작업에서 이전에 대규모 데이터 세트에 대해 훈련된 저장된 네트워크
- 사전훈련된 모델을 그대로 사용하거나 전이 학습을 사용하여
- 이 모델을 지정된 작업에 사용자 지정도 가능

- pre-trained 모델의 feature들은 그대로 활용하면서
- 맨 마지막 분류를 하는 layer(FC layer)는 새로운 target 데이터셋에 맞게 변경🔥🔥
- 새로 들어오는 데이터셋의 shape에 맞게 변경
전이학습을 하기 위한 4가지 STEP
- source 데이터셋으로부터 pre-trained된 네트워크 모델을 준비
- 이때 pre-trained 된 모델의 디자인이나 파리미터들은 가져오게 됨
- 우리가 원하는 model에 맞게 output layer를 수정
- 새로운 데이터셋을 바탕으로 해서 우리가 원하는 model을 학습

Fine-tuning 과 Fixed
- 방금 위 전이학습을 위한 4가지 STEP에서 우리가 택할 수 있는 방법 2가지에 해당
- Fine-tuning
- pre-trained된 모델을 기반으로 새로운 목적에 맞게 변형
- 이미 학습된 모델의 weight를 미세하게 조정하여 학습 진행
- learing rate를 충분히 작게 해서 target 데이터세트에 맞게 조금씩만 학습하도록
- output layer의 learing rate를 상대적으로 높게 해서 target 데이터 세트에 맞게 잘 분류될 수 있도록 설계
- Fixed
- pre-trained 된 모델로부터 도출된 weight를 그대로 활용
전이학습의 효과
- Target data (=ImageNet에는 없는 이미지 classs지만 우리가 예측하고 싶은 이미지)
- 5개의 class : Hat, Cube, Card, Torch, Screw

- ImageNet으로 pre-trained된 VGG16으로 Target data를 적용했을 때의 결과 (전이학습 X)

- 전이학습을 적용하고서 Target data를 적용했을 때 결과

728x90
LIST
광고
광고
'빅데이터 인공지능 > 딥러닝' 카테고리의 다른 글
[딥러닝] GAN(Generative Adversarial Networks) (0) | 2022.12.04 |
---|---|
[딥러닝] 오토인코더(Autoencoder) (0) | 2022.12.04 |
[딥러닝] RNN을 위한 PyTorch 구현 (1) | 2022.11.30 |
[딥러닝] RNN(Recurrent Neural Network) (1) | 2022.11.30 |
[딥러닝] CNN 모델 소개(LeNet, AlexNet, VGG, GoogLeNet, ResNet, DenseNet) (0) | 2022.11.28 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 데이터분석
- HTML
- react-query
- 프론트엔드 공부
- 딥러닝
- 자바
- 리액트
- 스타일 컴포넌트 styled-components
- 자바스크립트
- 머신러닝
- 프론트엔드
- styled-components
- rtl
- frontend
- JSP
- TypeScript
- jest
- next.js
- Python
- 프로젝트 회고
- 프론트엔드 기초
- 파이썬
- 자바스크립트 기초
- react
- CSS
- 디프만
- testing
- 타입스크립트
- 인프런
- 리액트 훅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함