🖇 1. 콜백 (Callbacks)
🖇 2. 학습 단위 (Batch)
🖇 3. 데이터 스케일링 (Data Scaling)
🖇 4. 학습률과 에폭 (Learning Rate & Epochs)
🖇 5. 은닉층과 뉴런 수 (Hidden Layers & Neurons)
🖇 6. 활성화 함수 (Activation Function)
🖇 7. 가중치 초기화 (Weight Initialization)
🖇 8. 옵티마이저 (Optimizer)
딥러닝 모델의 성능에 있어서 '학습 기술'이 중요하게 작용한다. 어떤 활성화 함수를 사용할지, 가중치는 어떻게 초기화할지, 학습률은 얼마나 줄지, 배치 단위는 어떻게 설정할지 등 세부적인 설정이 전체 결과를 결정짓게 된다.
이 글에서는 이러한 딥러닝 학습 기술들의 특징을 기반으로 반드시 알아야 할 요소를 주제별로 정리해 보았다. 그 개념과 흐름을 이해하는 데 중점을 두었다.
콜백은 모델 학습 중간에 특정 조건을 만족하면 실행되는 기능이다.
Keras에서는 fit() 함수의 인자로 callbacks 리스트를 통해 지정할 수 있다.
patience 만큼의 여유 기간을 두고 개선 여부를 판단monitor='val_loss'를 기준으로 조기 종료를 판단하며, 필요에 따라 val_accuracy나 다른 지표로 변경 가능함restore_best_weights=True로 설정하면 별도 저장 없이도 최적 가중치를 자동 복원💡 이처럼 콜백은 학습 도중 모델이 과적합되지 않도록 막아주고, 가장 성능이 좋았던 상태를 자동으로 저장하거나 복원해서 실수 없이 안정적으로 학습을 마칠 수 있게 해준다.
전체 데이터를 한 번에 학습시키는 Full Batch 방식은 이론상 정확하지만, 계산 효율이 매우 떨어진다. 대신 다음의 방식들이 자주 사용된다.
Batch Size가 작을수록 진동이 커지고 시간이 오래 걸리지만, 일반화에 유리한 경우도 있다.
💡 실제로 대부분 Mini-Batch 방식을 사용한다. 적절한 배치 크기 선택은 하드웨어, 메모리, 데이터 특성에 따라 달라진다.
입력 데이터의 스케일이 너무 다르면 특정 특성이 가중치 학습에 불균형한 영향을 미친다. 이로 인한 왜곡을 방지하기 위해 전처리가 필요하다.
💡 표준화는 모델이 정규분포 전제를 포함할 때 유리하고, 정규화는 범위 제한이 필요한 상황에 자주 사용된다.
→ 손실 함수의 기울기(gradient)에 곱해지는 값
→ 전체 데이터를 몇 번 반복 학습할지를 의미
💡 학습률과 에폭은 서로 보완 관계이고, 일정 학습률 이하로 줄어들면 더 이상 손실 감소 효과가 없기 때문에 EarlyStopping과 연동하는 것이 일반적이다.
딥러닝 모델의 표현력은 은닉층(hidden layer)의 수와 각 층의 뉴런(neuron) 수에 따라 달라진다.
💡 적절한 구조는 데이터의 복잡도에 따라 달라지고, Dropout이나 정규화를 통해 복잡도 제어가 가능하다.
💡 중요한 건 층의 수가 아니라 필요한 만큼의 표현력만 확보하는 것이다.
딥러닝은 선형 모델로는 표현할 수 없는 비선형 패턴을 학습해야 하므로 활성화 함수가 필요하다.
→ 딥러닝이 단순 선형 회귀보다 뛰어난 이유는 비선형 활성화 함수 덕분이다.
💡 ReLU가 기본값으로 사용되고, 음수 대응이 필요한 경우 Leaky ReLU 등을 고려한다.
신경망 학습은 적절한 초기 가중치 없이는 불가능하다.
모든 가중치를 0으로 초기화하면 모든 뉴런이 같은 출력을 내고, 역전파가 동작하지 않는다. 무작위로 초기화하되, 분포를 조절하여 효율적인 학습이 가능하게 하게 해야 한다.
다음은 대표적인 초기화 방법이다.
💡 올바른 초기화는 학습이 안정적으로 수렴하도록 해주고, 빠른 속도로 최적점에 도달할 수 있도록 만든다.
옵티마이저는 손실 함수가 최소가 되도록 파라미터를 조정하는 역할을 한다.
SGD: 기본 경사 하강법. 단순하지만 느림
Momentum, NAG: 경사 방향에 관성을 부여하여 진동 방지
Adagrad: 파라미터별 학습률 조절. 자주 업데이트되는 파라미터에 작은 학습률 부여
RMSprop: 최근 그래디언트만 반영하여 학습률 조절. RNN 등에서 효과적
Adam: 모멘텀 + RMSprop 결합. 대부분의 모델에서 기본값으로 채택
💡 옵티마이저는 모델의 수렴 속도, 안정성, 일반화 성능을 결정하는 중요한 요소다.
💡 딥러닝에서는 대부분 Adam을 시작점으로 사용하고, 성능 향상 필요시 Lookahead, LAMB, Ranger 등의 최신 기법을 탐색한다.
모델이 너무 단순하거나 너무 복잡하면 학습 성능에 문제가 발생한다.
💡 결국 좋은 모델은 학습 데이터에 너무 덜 맞춰서도, 너무 과하게 맞춰서도 안 된다. 일반화 성능을 중심으로 모델을 평가하고 조정해야 한다.
딥러닝은 모델을 많이 쌓는 것보다 학습을 잘 되게 만드는 설계가 훨씬 중요하다는 것을 알 수 있었다. 에폭을 늘리면 일단 성능이 나아지는 줄 알았는데 학습률이나 가중치 초기화가 잘못되면 아예 시작부터 학습이 안 된다는 걸 이해하였다.
EarlyStopping 같은 콜백이 왜 필요한지, 옵티마이저마다 어떤 차이가 있는지를 이해하는 것도 학습의 안정성에 있어 중요하다는 것을 알았다.
앞으로 학습이 안 되는 상황이 오면 무작정 구조를 바꾸기보다 먼저 학습 환경을 점검해 봐야겠다는 기준이 생겼다.