[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 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
- Training 데이터 from S3 (boto3)
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) 플로우 차트
📙 내일 일정
- 최종 프로젝트
'TIL _Today I Learned > 2024.12' 카테고리의 다른 글
[DAY 100] 최종 프로젝트_ GitLab (1) | 2024.12.10 |
---|---|
[DAY 99] 최종 프로젝트_ AWS 아키텍처 설계 (1) | 2024.12.09 |
[DAY 97] 최종 프로젝트_ GraphRAG, MLOps, CI/CD (0) | 2024.12.05 |
[DAY 96] 최종 프로젝트_ 프로젝트 개요] 최종 프로젝트_ 워크플로우 (3) | 2024.12.03 |
[DAY 95] 최종 프로젝트_ KST와 IRT 통합 (1) | 2024.12.03 |