* 필수 온라인 강의 Part19 Deep Learning CH04 성능 고도화 학습
좋은 모델을 학습하기 위한 기초
- 과소적합(Underfitting)이나 과적합(Overfitting)이 아닌 상태가 적합한 상태(Good fitting)
- 과적합 (Overfitting) : 학습 데이터 오차가 일반화 오차에 비해서 현격하게 낮아지는 현상
1)학습 데이터는 부족한데, 2)모델의 파라미터가 많은 상황에서 과적합이 발생
- 이런 상태를 모델이 강건하다(Robust)고 표현 - 편향(Bias)와 분산(Variance) 사이의 관계
- 편향 : 평균적으로 얼마나 벗어나있냐?
- 분산 : 얼마나 퍼져있냐
-> 둘다 낮은 게 좋음
: 모델의 복잡성이 증가하면 분산은 증가하고 편향은 감소하는 경향
: 모델의 복잡성이 감소하면 편향은 증가하고 분산은 감소하는 경향 - 지역 최소값 / 전역최소값
- 지역 최소값(Local minimum) : 손실 함수의 특정 영역에서 가장 낮은 점을 의미
- 전역 최소값(Global minimum) : 손실 함수의 전체 영역에서 가장 낮은 점을 의미
네트워크 안정화 기법
- 드롭아웃
- 모델 학습 시, 임의의 가중치 노드를 일정 확률로 비활성화시키는 방법 - 과적합을 방지하기 위해서 모델의 중간 가중치 노드에 노이즈를 주면서 해당 노드에서 학습이 진행되지 않게끔 함
- 모델 학습 중에는 손실함수에 대한 기울기(Gradient)가 흐르지 않아 가중치 업데이트가 되지 않음
-> 역전파 진행X
-> 앙상블( Ensemble, 개별적으로 학습시킨 여러 모델의 결과를 종합하여 추론하는 방식) 방법 중 하나
- 드롭아웃도 학습 때 뉴런을 무작위로 삭제하는 행위가 마치 매번 다른 모델을 학습시키는 것으로 해석가능
- 추론 시에는 모든 뉴런을 사용하므로 여러 모델의 앙상블로 해석 가능 - 피처 스케일링(Feature Scaling) = 정규화
- 서로 다른 입력 데이터의 값을 일정한 범위로 맞추는 작업
- 학습시 모든 특징(Feature)을 편향없이 학습
- 딥러닝에서는 일반적으로 0과 1 사이로 정규화
- 배치 정규화(Batch Normalization)
- 배치(Batch) 단위의 데이터를 기준으로 평균과 분산을 계산하여 활성화 레이어 이후 출력을 정규화하는 방법
<사용 이유> 모델 학습 과정에서 내부 데이터 분포 변화(Internal Covariate Shift)가 발생으로 인해 모델이 제대로 학습하지 못하게 될 가능성이 있음 -> 모델의 각 층에서 발생하는 파라미터 업데이트로 인해 다음 층의 활성화 값들의 분포가 변화하기 때문에 발생 -> 네트워크의 학습이 느려지거나 불안정
<배치 정규화의 목표> 각 층을 통과해도 데이터가 고르게 분포될 수 있게 만들자
1) 완전 연결 레이어 이후, 2) 활성화 함수를 적용하기 전에 적용하는 것을 추천
<단점> 텍스트와 같은 시계열 데이터에서 활용하기 어렵기 때문에 RNN이나 LSTM과 같은 모델에 적용하기 번거로움
-> 배치의 크기가 작은 경우 전체 데이터셋에 대한 정보를 반영하기 어려움
- 레이어 정규화(Layer Normalization)
- 배치 정규화의 단점을 보완한 방법 중 하나( 배치 정규화와 다르게 배치 사이즈에 무관하게 사용 가능 )
- 개별 데이터 샘플 내에서 모든 특징들의 평균과 분산을 계산하여 정규화
- 인스턴스 정규화(Instance Normalization)
- 각 데이터 샘플의 각 채널에서 평균과 분산을 계산하여 정규화
- 통상적으로 이미지 스타일 변환(Image Style Transfer)와 같은 분야에서 각 데이터의 고유한 정보를 유지하기 위해 사용
- 그룹 정규화(Group Normalization)
- 배치 정규화의 단점 중 하나인 배치 사이즈를 극복하기 위한 방법 중 하나
- 채널을 여러 그룹으로 나눈 후, 각 그룹 내에서의 평균과 분산을 계산하여 정규화하는 방법
- 객체 인식 (Object detection)이나 영역 분할(Segmentation)과 같이 배치 사이즈를 늘리기 어려운 상황에서 활용 가능
- 는 앞선 인스턴스 정규화의 확장 버전 중 하나
요약
배치 정규화: 배치 단위로 학습시 발생할 수 있는 분포를 정규화하여 모델 학습을 안정화함
레이어 정규화: 시계열 데이터와 같은 가변적인 입력에서 적용이 힘든 배치 정규화의 단점을 보완함
인스턴스 정규화: 이미지 스타일 변환와 같이 각 데이터만의 고유한 정보를 유지할 때 이용
그룹 정규화: 인스턴스 정규화의 확장 버전으로 배치 사이즈의 크기가 작아도 잘 동작하는 방법을 제안
가중치 초기화
- 모델의 학습 속도에 큰 영향을 미침
1. 가중치 초기화(Weight Initialization)를 진행하지 않으면 모델의 층이 깊어질수록 활성화 함수 이후 데이터의 분포가 한 쪽으로 쏠릴 수 있음 -> 효율적이고 원활한 모델 학습을 방해
2. 전역 최소값을 나아가는 과정에서 가장 중요한 부분 : Plateau와 같은 지점에서 초기화가 된다면 모델 학습이 비효율적
3. 모델의 층이 깊어질수록 손실 함수로부터의 기울기 값이 점점 작아지거나 커질 수 있음 : 오차역전파로 가중치를 갱신해야하는 모델의 학습을 효율적으로 진행되지 않게 만들 수 있음.
안 되는 방법
1. 0으로 초기화
: 손실함수로부터의 기울기가 있어도 업데이트가 안 되기 때문에 가장 최악의 방법
2. 균등하게 가중치를 초기화
: 고르게 잘 퍼지지만, 출력 값의 범위가 너무 넓은 것을 확인이 됨
3. 표중 정규분포로 초기화
: 가중치의 값이 너무 크거나 너무 작게 초기화 되어 학습에 방해
-> 각 층의 활성화 함수 이후 출력 값은 적당히 넓게 고루 분포하게 하는 것이 목표!!!!!
: 모델 각 층과 층 사이에 적당하게 다양한 가중치가 있어 데이터가 흐르게 해야 학습시 편향되지 않고 효율적으로 이루어질 수 있음
-> Xavier 초기화 방법과 He 초기화 방법
- Xavier 초기화(Xavier initialization) : 대표적인 가중치 초기화 전략 중 하나
- 시그모이드(Sigmoid)나 하이퍼볼릭 탄젠트 (Tanh) 같은 선형 활성화 함수 또는 이들의 근사를 사용할 때 효과적
- 초기에 너무 큰 가중치 값을 설정하면 기울기가 너무 커지거나 작아져서 학습이 어렵게 될 수 있는 문제를 해결
- 이전 레이어의 노드 수에 비례하여 가중치를 초기화 -> 이전 레이어의 노드 수가 많을수록 각 가중치의 크기는 작아짐
* 시그모이드와 같은 활성화 함수에선 효과가 좋았지만, 특정한 활성화 함수에선 여전히 문제를 해결할 수 없음
( ReLU 활성화 함수의 미분값은 음수일 때 출력이 0이므로, 여전히 레이어가 깊어질수록 기울기가 소실)
⇒ He 초기화(He Initialization)는 이러한 치명적인 문제를 완화시키려는 목적으로 제안 - He 초기화
- 이전 레이어의 노드 수에 비례하여 가중치를 초기화
- ReLU 활성화 함수의 특성 때문에 더 큰 스케일을 사용
- ReLU 활성화 함수가 음수일 때 0을 출력하므로, 더 큰 가중치로 시작하여 기울기 소실 문제를 완화하는 데 도움이 됨
⇒ 시그모이드와 같은 활성화 함수를 쓰게 된다면, Xavier 초기화 방법
⇒ ReLU와 같은 활성화 함수를 쓰게 된다면, He 초기화 방법
-> 다양하게 쓰는 게 좋음
- 배치 정규화와의 비교
- 데이터를 정규화하고 배치 정규화도 활성후 레이어 이후의 출력을 정규화한다는 공통점이 있음
- 두 방법은 언제 누구에게 사용되느냐에 차이점이 있다.
- 가중치는 초기에만! 배치는 배치마다!!!!
규제화 및 학습률 조정
- 가중치 감소
- 큰 가중치에 대한 패널티를 부과함 : 모델의 가중치를 작게 유지
- 모델의 복잡도를 감소시켜 모델이 훈련 데이터에 과도하게 적합하는 것을 억제
- 훈련 데이터가 적거나, 훈련 데이터에 노이즈가 많은 경우에 유용 - 학습 조기 종료
- 모델 학습 시 과적합을 방지해주는 방법
- 모델의 학습 오차는 계속 해서 줄어들어 과적합이 되고 검증 오차는 어느 순간 증가
: 학습 오차는 줄어들지만 검증 오차가 줄어들지 않고 늘어나는 시점에서 학습을 중지 - 학습 스케쥴러
- 딥러닝 훈련 과정에서 사용되는 학습률을 동적으로 조절하는 역할
- 적절한 학습률 스케줄링은 학습 속도를 빠르게 하고, 지역 최소값을 벗어나게 하며, 일반적으로 더 나은 성능의 모델을 얻게 해줌
- 학습 스케쥴러의 종류
- Constant 초기에 설정한 학습률을 학습 과정 전체에 걸쳐 변경하지 않음
- Step Decay 일정한 주기(epoch 또는 iteration)마다 학습률을 일정 비율로 감소
: 예를 들어, 초기 학습률을 0.1로 설정하고 50 에포크마다 학습률을 0.5배로 줄이는 경우를 고려
- Exponential Decay 학습률을 지수적으로 감소
- Cosine Annealing 코사인 함수를 따라 학습률이 감소하도록 설정
: 이는 학습률이 안정적인 감소를 보이게 하며, 일정 주기로 다시 재시작할 수 있음
- One-cycle Policy 학습률이 먼저 증가한 다음 감소하도록 설정
: 이는 빠르게 수렴하게 하고, 끝부분에서는 학습률을 감소시켜 안정적인 학습을 도움
다양한 최적화 알고리즘
- 기본적인 옵티마이저
- Gradient Descent (GD, 경사 하강법) : 가장 기본적인 최적화 알고리즘
- 손실 함수의 기울기를 계산하고 모델 가중치를 갱신
- Stochastic Gradient Descent (SGD) : 전체 데이터셋이 아닌 무작위로 선택한 하나의 샘플을 사용하여 가중치를 갱신
- 옵티마이저의 진행 방향에 따라서 기울기가 달라지게 되면, 매우 비효율적으로 진행
- Mini-Batch Gradient Descent : 작은 단위의 데이터셋을 사용하여 기울기를 계산하여 가중치를 갱신 - 스텝 방향을 개선한 옵티마이저
- Momentum
- SGD에 관성 효과를 추가한 것 , 이전 기울기를 고려하여 가중치를 갱신 : 최적점을 더 빠르게 도달
- 지역 최소값을 피하는데 더욱 효과적
- Nesterov Accelerated Gradient (NAG)
- Momentum의 변형 : 관성 효과를 조금 더 똑똑하게 적용
- Nesterov는 다음 위치에서의 기울기를 미리 계산하여 보다 더욱 정확하게 업데이트를 가능 - 스텝 사이즈를 개선한 옵티마이저
- AdaGrad
- 학습률을 자동으로 조정하면서 가중치를 갱신하는 방법
- 갱신할 크기에 집중
- 빈번하게 발생하는 특성에 대한 학습률을 낮추고, 드물게 발생하는 특성에 대한 학습률을 높일 수 있음 : 적응력이 있다(Adaptive)
- AdaGrad는 과거의 기울기를 계속 반영하여 더하기 때문에 학습이 진행될수록 업데이트가 많이 되지 않음
- RMSProp - AdaGrad의 단점을 해결하기 위해 제안된 방법
- 과거의 모든 기울기 정보를 고려하지 않고, 최근 기울기 위주로 업데이트를 진행
- 지수 이동 평균(Exponential Moving Average, EMA) 방식을 사용 - 스텝 방향과 사이즈 모두 개선한 옵티마이저
- Adam (Adaptive Moment Estimation) - Momentum의 장점(스텝 방향)과 RMSProp의 장점(스텝 사이즈)을 모두 결합한 방법
- 1차 모멘트(평균)와 2차 모멘트(분산)을 추정하여 학습률을 조정
요약
데이터 증강
- 데이터 증강 기법
- 학습 데이터가 부족 : 데이터가 충분하지 않다면 과적합이 발생한
-> 데이터를 더 이상 구할 수 없는 상황이라면 데이터 증강 기법(Data Augmentation)을 고려
- 이미지 데이터에서 가장 많이 활용하는 이미지 증강 방법
- 이미지 사이즈 조절(Resize), 회전(Rotation), 뒤집기(Flipping) 그리고 자르기(Crop)
- 파이썬에서는 OpenCV 라이브러리를 이용하면 간단하게 구현
→ 텐서플로우(TensorFlow)나 파이토치(PyTorch)와 같은 딥러닝 프레임워크(Deep Learning Framework)에서는 이미 기본적인 데이터 증강 기법을 지원 - 이미지 데이터 증강
오픈 소스 라이브러리
- Albumentations : 텐서플로우와 파이토치 모두 지원
- ImgAug : 정답 레이블(Ground Truth)를 수정해야할 경우 많이 활용
주의 해야할 점
- 함부로 데이터를 변형하여 증폭시키면 안 됨
- 해당 데이터의 도메인(Domain)을 잘 고려해서 처리
- 데이터 증강 기법을 적용할 때 문맥이나 의미를 왜곡하지 않도록 주의
그 외 다양한 방법들
- Cutout : 이미지의 일부 영역을 검은색 또는 특정 값으로 가림으로써 데이터에 변화를 주는 방법
- Mixup : 두 이미지의 픽셀 값을 선형적으로 조합하여 새로운 이미지를 생성
- 해당 이미지들의 정답 레이블도 동일한 비율로 조합
- CutMix : 하나의 이미지에서 잘라낸 영역을 다른 이미지에 붙여넣는 방식
- 두 이미지의 정답 레이블도 조합된 - 텍스트 데이터 증강
- 의미를 유지하면서 데이터를 증강시키는 것이 중요함
- 동의어 대체(Synonym Replacement, SR)
- 문장에서 불용어가 아닌 n개의 단어를 무작위로 선택한다. 이 단어들을 무작위로 선택된 동의어
- 무작위 삽입(Random Insertion, RI)
- 문장의 불용어가 아닌 무작위 단어의 동의어를 찾는다. 그 동의어를 문장의 무작위 위치에 삽입
- 무작위 교체(Random Swap, RS)
- 문장에서 두 단어를 무작위로 선택하고 그들의 위치를 교환
- 항상 성공적인 결과를 가져다주는 것은 아니며, 문맥이나 문법에 따라 의도하지 않은 결과를 초래 가능
- 증강된 데이터가 원본 데이터의 의미나 문맥을 잘 반영하도록 주의가 필요
- 무작위 삭제(Random Deletion, RD)
- 각 단어를 확률 p로 문장에서 무작위로 제거
- 무작위 교체와 동일하게 적용시, 문맥이나 문법에 따라 의도하지 않은 결과를 초래할 수 있으니 주의
- 의미 유지 변환 방법
- 문장의 의미를 유지하면서 다양한 구조적 변화나 문법적 변화
- 문장의 의미는 그대로 유지하면서, 문장의 구조나 문법을 바꾸어 다양성을 높이는 방법
- 능동태에서 수동태로 변환이나 직접화에서 간접화로 변환와 같은 예시
- 역번역(Back Translation)을 이용한 방법
- 문장을 한 언어에서 다른 언어로 번역한 후, 다시 원래의 언어로 번역하는 방식
- 이 과정에서 발생하는 약간의 번역 오류나 단어 선택의 변화는 원본 데이터셋에 다양성을 추가
- 원래 문장의 의미를 크게 훼손하지 않으면서 약간의 변화를 주기 위해 다른 언어로 번역한 후 원래의 언어로 다시 번역하는 방식
- 사전학습된 언어모델(Pretrained LM)을 이용한 방법
- BERT, GPT2, BART와 같이 사전학습된 언어모델(LM)을 사용
- 주어진 문장의 문맥을 기반으로 새로운 문장이나 문장 내용을 생성 : 원본 문장과 관련된 새로운 문장 예시 생성
- Temperature 값에 따라 문장의 완성 형태가 달라짐
- 낮은 Temperature는 원래 주제에 매우 충실한 문장을 생성하는 반면, 높은 Temperature는 더 다양하고 창의적인 문장을 생성
- Top-k나 Top-p 같은 파라미터를 사용해서 텍스트 생성을 제어
- Top-k는 모델이 고려할 수 있는 단어의 집합을 확률이 높은 상위 k개의 단어로 제한
- .Top-p는 확률이 높은 단어들을 차례대로 더해, 누적 확률이 p를 초과하는 시점의 단어까지를 고려
그 외의 방법
- 전이 학습
- 이미 다른 문제에 대해 학습된 모델의 지식을 새로운 작업에 활용하는 방법
- 하나의 문제를 해결하기 위해 학습된 지식을 다른 문제에 '전이(Transfer)'시키는 방법
- 의료 이미지 분석 (Medical Image Analysis) 분야에서는 소량의 데이터로 전이 학습을 통해 높은 성능을 달성
- 텍스트 데이터에서도 감정 분석 같은 작업에서 전이 학습의 효과
- 소스(Source) 데이터셋와 타겟(Target) 데이터셋의 도메인 간의 큰 차이나게 되면 전이 학습을 하기 어려움
- 많은 레이어를 학습시킬 때 과적합의 위험 : 상황을 잘 고려해서 적용 - 자기 지도 학습(Self-Supervised Learning, SSL)
- 지도학습을 위한 레이블링은 시간과 비용이 많이 드는 작업/ 전문지식이필요
-> 이런 배경 아래, 전혀 레이블 없이 혹은 최소한의 레이블만을 이용하여 효과적으로 모델을 학습시킬 방법들에 대한 연구
- 레이블이 명시적으로 제공되지 않아도 모델이 스스로 학습할 수 있도록 하는 방식
- 데이터 내부의 패턴이나 구조를 이용해 "가상의" 레이블 또는 문제를 생성 -> 모델이 유용한 특징을 추출하도록 학습
- 이미지의 일부분을 가리고 그 가려진 부분을 예측하도록 하는 것, 또는 이미지를 회전시킨 후 얼마나 회전되었는지를 예측하도록 하는 것 등이 자기 지도 학습의 방법 중 일부
- 생성 학습(Generative Learning)
- 자기 지도 학습 중 하나는 생성 학습
- 동일한 이미지를 다르게 변형하거나 조작하여 '원본 이미지'와 '변형된 이미지'의 관계를 학습하는 방식을 사용
- 이미지 자체가 레이블의 역할 : 인코더(Encoder)에서 학습 데이터의 표현 공간(Representation space)을 학습
- 대체 작업 학습(Proxy Task Learning)
- 학습된 특징들은 후에 원래의 작업에 활용
- Exemplar를 활용한 방법 : 해당 방법에서는 각각의 이미지를 여러 방식으로 변형(augment)하여 원본 이미지를 식별할 수 있는 특징을 학습 , 원본 이미지와 그 변형된 이미지들이 같은 클래스에 속하도록 학습하는 것
- 데이터의 각각의 인스턴스를 구분하는 능력을 향상
- 대조 학습(Contrastive Learning)
- 서로 다른 이미지나 데이터 포인트를 얼마나 비슷하거나 다른지를 비교하는 것을 목표
- 데이터의 다양한 특징을 인식
- 이러한 유사성을 계산하기 위해선 앞에서 배운 데이터 증강 기법을 다양하게 수행
'Study > 머신러닝' 카테고리의 다른 글
Pytorch (0) | 2024.12.16 |
---|---|
Deep Learning 기본 모델 구조 (1) | 2024.12.16 |
Deep Learning 모델 학습법 (0) | 2024.12.13 |
Deep Learning 기본 개념 (5) | 2024.12.10 |
머신러닝 Advanced_캐글 대회 (6) | 2024.11.09 |