본문 바로가기
TIL _Today I Learned/2024.12

[DAY 98] 최종 프로젝트_ 모델 Fine Tuning, 플로우 차트

by gamdong2 2024. 12. 6.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.12.06

📕 프로젝트 작업 내역

  • 모델 Fine Tuning 계획
  • 플로우 차트

 

📗 수행 결과

1. 모델 Fine Tuning 계획

1) 모델 정보

  • 이름: trocr-small-korean
  • 정의: VisionEncoderDecoderModel  이미지 → 텍스트(한국어 특화)”

2) 데이터 준비

  • 수학 과목 자동 풀이 데이터(AI Hub)
  • 데이터 구성
    • Training 데이터 from S3 (boto3)
      • 15,224
      • 입력 데이터(X): 이미지, 이미지 내 텍스트 영역(line) 좌표
      • 텍스트 라벨(y): 해당 영역의 텍스트(한국어)
    • Validation 데이터 from S3 (boto3)
      • 1,703
      • 학습 중 모델 검증 및 과적합 방지를 위해 사용
      • X, y

3) 데이터 전처리

  • 이미지 전처리
    • DeiTFeatureExtractor 사용
    • 384x384로 리사이즈
    • 평균값 0.5, 표준편차 0.5로 정규화
[tip] 인코더/디코더
- trocr-small-korean 모델의 인코더/디코더: DeiT/TrOCR
- DeiT 인코더: 이미지 데이터를 Transformer 방식으로 처리(고정된 입력 조건; 이미지 크기, 정규화, Tensor 변환)
- TrOCR 디코더: 인코더가 처리한 데이터를 텍스트로 변환

[tip] DeiTFeatureExtractor
- DeiT: Transformer 기반으로, 원래 NLP에서 사용되던 구조를 이미지 분류와 같은 컴퓨터 비전 작업에 적합하도록 변형 
- DeiTFeatureExtractor: DeiT 인코더가 데이터를 이해할수 있는 형식(Transformer 방식)으로 변환하기 위한 도구 
  • 텍스트 라벨 처리
    • 텍스트 라벨을 토큰화하여 디코더에 입력
    • Hugging Face의 AutoTokenizer를 활용해 사전 학습된 토크나이저 사용
[tip] Tokenization
- trocr-small-korean 모델은 Transformer 기반 모델이므로, 텍스트를 토큰화 하여 비교함 (전체 텍스트를 읽어서 라벨 데이터와 비교 X) 
- 즉, 모델은 이미지를 보고 텍스트를 하나의 숫자 시퀀스(토큰 ID) 단위로 예측하며, 이를 라벨(정답) 시퀀스와 비교하는 방식으로 학습
- 예측된 텍스트의 토큰 시퀀스 vs 라벨 텍스트의 토큰 시퀀스 비교하여 손실함수(Cross-Entropy Loss) 계산
  머신러닝(Machine Learning) 딥러닝(Deep Learning)
신경망
사용 여부
신경망을 사용하지 않는 전통적 알고리즘 사용 다층 신경망(Deep Neural Network) 기반으로 학습
특징
추출 방식
사람이 직접 특성을 설계(특성 공학) 원시 데이터를 입력받아 모델이 자동으로 특징 추출
데이터
요구량
적은 데이터로도 학습 가능 대규모 데이터가 필요
연산
요구량
CPU로도 충분 GPU/TPU 같은 고성능 연산 장치 필요
모델의
복잡성
단순하고 해석 가능 복잡하며 블랙박스(Black Box)처럼 작동
모델
해석 가능성
모델의 동작 원리를 쉽게 이해 및 설명 가능 모델 해석이 어려운 경우가 많지만 Explainable AI로 보완 가능
적용
데이터 유형
구조화된 데이터(Tabular Data)에 적합 비정형 데이터(이미지, 음성, 텍스트 등)에서 우수한 성능
적용 분야 - 스팸 필터링
- 금융 사기 탐지
- 고객 세분화
- 얼굴 인식
- 자율주행
- 자연어 처리(NLP)
가중치
업데이트
내부적으로 최적화 알고리즘이 사용되지만 명시적 설정은 불필요 옵티마이저를 직접 지정하고 명시적으로 가중치 업데이트 수행
학습 방식 비교적 간단한 알고리즘 기반 비선형 함수와 다층 구조를 통한 복잡한 학습
대표 모델 - 선형 회귀
- 로지스틱 회귀
- SVM
- 랜덤 포레스트
- CNN
- RNN
- 트랜스포머
- GAN

 

4) 학습 설정

  • 하이퍼파라미터
    • 학습률 (Learning Rate): 1e-4
    • 배치 크기 (Batch Size): 32 → Steps per Epoch = 476(15,225/32)
    • 최대 반복 스텝 (Max Steps): 10,000~20,000 → 에포크(Epochs): 21~42(10,000/476)
    • 가중치 감쇠 (Weight Decay): 0.01
    • 학습률 감소 (Learning Rate Decay): 0.1
    • 옵티마이저 (Optimizer): AdamW
      • Beta1: 0.9
      • Beta2: 0.98
개념 의미 조정 효과 계산 방법
배치 크기 한 번의 학습 스텝에 사용되는 데이터 샘플 개수 작으면 세밀한 학습, 크면 빠른 학습 N/A
에포크 전체 데이터셋을 학습하는 반복 횟수 에포크 수가 적으면 학습 부족, 많으면 과적합 Epochs = Max Steps ÷ (데이터셋 크기 ÷ 배치 크기)
최대 반복 스텝 모델이 학습하는 전체 스텝의 개수 학습을 정밀하게 제어 가능 Max Steps = (데이터셋 크기 ÷ 배치 크기) × Epochs
[tip] 학습률(Learning Rate)
- 모델 학습 과정에서 가중치를 얼마나 빠르게 업데이트할지 결정하는 값
- 모델의 가중치는 손실함수를 최소화하기 위해 옵티마이저를 사용하여 업데이트됨. 이때 학습률이 변화의 크기를 결정
- 학습률은 기울기를 따라 이동하는 거리의 크기를 제어     

[tip] 옵티마이저(Optimizer)
- 모델의 가중치를 업데이트하는 알고리즘
- 종류: 경사 하강법, 확률적 경사 하강법, 모멘텀, Adam, AdamW,... 

[tip] 가중치(Weights)
1) 가중치란?
- 가중치는 모델 학습 과정에서 데이터의 특성(feature)과 결과(output) 사이의 관계를 표현하는 값
- 모델이 데이터를 입력받아 예측값을 출력할 때, 가중치를 사용하여 입력 데이터를 계산
- 가중치는 학습을 통해 계속해서 업데이트 됨; 입력과 출력 간의 관계를 최적화하는 방향으로 조정

2) 가중치의 역할
2-1) 입력 데이터 변환
- 입력 데이터와 가중치를 곱함 -> 모델의 활성화 함수에 전달 -> 비선형성을 추가 -> 다음 계층으로 전달
- ex: y = wx + b (w: 가중치, x: 입력 데이터, b: 편향 값 (Bias))
2-2) 모델의 학습 결과 저장
- 모델은 데이터의 패턴을 학습하면서 가중치를 조정
- 학습된 가중치는 모델의 "기억" 역할을 하며, 학습된 데이터와 유사한 데이터를 입력받을 때 적절한 예측을 수행함

3) "가중치가 지나치게 커진다"의 의미
- 학습 과정에서 가중치 값이 과도하게 증가
- 이 현상은 다음과 같은 이유로 발생할 수 있음
 (i) 학습률이 너무 큼: 모델이 손실을 최소화하는 방향으로 가중치를 업데이트하는 속도가 지나치게 빠르면, 가중치가 폭발적으로 커질 수 있음
 (ii) 모델의 과적합: 학습 데이터에 너무 적합하려다 보니 가중치가 극단적으로 조정되어 데이터의 노이즈까지 학습하게 됨
 (iii) 정규화 기법 부족: 가중치가 과도하게 커지는 것을 막는 정규화 기법이 없을 경우, 모델이 불안정하게 학습될 수 있음

4) 가중치 폭발을 방지하는 방법
4-1) 가중치 초기화
- 모델 학습 초기에는 가중치를 적절히 초기화해야 함
4-2) 정규화 기법
- 가중치 감쇠(Weight Decay): 가중치 값이 너무 커지지 않도록 일정 비율로 줄이는기법
4-3) 적절한 학습률 설정      
- 학습률이 너무 크면 가중치가 급격히 변할 수 있으므로 적절한 값을 설정
- 학습이 안정화되면 학습률 감소를 적용

 

5) 손실 함수

  • Cross-Entropy Loss

6) Fine Tuning 프로세스

① 모델 초기화

  • VisionEncoderDecoderModel의 from_pretrained 메서드로 trocr-small-korean 불러오기

② 데이터 로더 구성

  • 학습 데이터와 검증 데이터를 torch.utils.data.DataLoader로 구성
  • 텍스트 좌표와 라벨은 입력으로 포함

③ 학습 루프

  • 각 배치(batch)에서
    • 입력 이미지를 전처리
    • 텍스트 좌표와 라벨을 모델에 함께 전달
  • 손실 함수로 Cross-Entropy 계산 후 역전파(Backpropagation) 수행

④ 검증 루프

  • Epoch마다 검증 데이터셋에서 손실 및 정확도 측정

⑤ 학습 로그 & 최종 모델 저장 to S3 (boto3)

  • 학습 로그 저장: 로그 파일에 학습 단계별 텍스트 예측과 정답 비교 결과 저장
  • 중간 모델 저장: 학습 도중 가장 성능이 좋은 모델을 체크포인트로 저장
  • 최종 모델 저장: 학습 종료 시 최종 결과물로 저장

⑥ 출력 설정

  • 최대 출력 길이 (max_length): 512
  • 시작 토큰 ID (bos_token_id): 0  문장의 시작을 나타내는 토큰 ID
  • 종료 토큰 ID (eos_token_id): 2  문장의 끝을 나타내는 토큰 ID

 

2. 플로우 차트

1)  플로우 차트


 
 

📙 내일 일정

  • 최종 프로젝트