손실 함수 줄이는 핵심! 경사 하강법과 옵티마이저 6가지 완벽 해설 (SGD, Adam)
손실 줄이기 대작전: 경사 하강법과 옵티마이저
이번 챕터 마지막 시간이야! 앞에서 손실 함수가 얼마나 틀렸는지 알려준다고 했잖아? 그럼 이제 궁금한 게 생길 거야. "그럼 틀린 걸 어떻게 고치지?" 바로 그 질문에 대한 답을 오늘 알아볼 거야. 바로 경사 하강법이랑 옵티마이저라는 친구들이야.
오늘 배울 것들
- 경사 하강법이 뭔지, 왜 중요한지
- 손실 함수가 어떻게 줄어드는지
- SGD, 모멘텀, 아담 같은 옵티마이저들의 차이점
- 케라스에서 옵티마이저를 어떻게 쓰는지
경사 하강법: 산 내려가기 게임
경사 하강법은 말 그대로 '기울어진 길을 따라 내려가는 방법'이야. 쉽게 말하면, "틀린 만큼, 틀린 방향으로 조금씩 조금씩 고쳐나가는 방법"이지. 이 한 문장에 경사 하강법의 핵심이 다 들어있어!
이걸 이해하기 쉽게 산 내려가기에 비유해 볼게.
- 산의 높이: 이게 바로 손실값이야. 높을수록 많이 틀렸다는 뜻이지.
- 현재 위치: 이게 모델의 가중치 상태야.
- 목표: 제일 낮은 지점, 즉 최소 손실값에 도달하는 거야.
우리가 지금 안개 낀 산꼭대기에 서 있다고 상상해 봐. 어디가 제일 낮은 곳인지 안 보이지? 이럴 때 우리는 발밑의 땅이 얼마나 기울어졌는지 느껴보고, 가장 가파르게 내려가는 방향으로 조금씩 발을 옮길 거야. 딥러닝 학습도 똑같아. 이렇게 조금씩 조금씩 아래로 내려가는 거지.
학습률: 얼마나 크게 움직일까?
여기서 중요한 개념이 하나 더 나와. 바로 학습률이야. 이건 "한 번에 얼마나 크게 이동할지"를 정하는 값이야.
- 학습률이 너무 크면? 엉뚱한 곳으로 튕겨나가서 제일 낮은 곳을 지나쳐 버릴 수 있어.
- 학습률이 너무 작으면? 너무 조금씩 움직여서 학습이 엄청 느려지겠지.
그래서 적절한 학습률을 잘 정해야 안정적으로 제일 낮은 곳에 도착할 수 있어. 학습률은 학습의 속도와 안정성을 동시에 결정하는 아주 중요한 친구야!
옵티마이저: 똑똑한 길잡이
이제 옵티마이저에 대해 알아볼 거야. 옵티마이저는 앞에서 배운 경사 하강법을 실제로 계산해서 구현한 방법이야. 경사 하강법이 '어떻게 내려갈까?' 하는 아이디어라면, 옵티마이저는 '이렇게 계산해서 내려가자!' 하는 구체적인 방법인 거지. 케라스에서 optimizer라고 설정하는 게 바로 이 옵티마이저들이야.
1. SGD (확률적 경사 하강법)
가장 기본적이고 간단한 옵티마이저야.
- 특징: 지금 있는 자리에서 기울어진 방향만 보고 딱 한 걸음만 이동해.
- 장점: 구조가 단순해서 이해하기 쉬워. 딥러닝 원리를 배울 때 가장 좋은 기본 형태야.
- 단점: 가끔 학습이 흔들리거나 느려질 수 있어.
2. 모멘텀 (Momentum)
SGD의 단점을 보완하기 위해 나온 거야.
- 특징: 이전에 이동했던 방향을 기억해! 마치 공을 굴리면 관성 때문에 바로 멈추지 않고 계속 굴러가는 것처럼 말이야.
- 장점: 이전 방향을 반영해서 흔들림이 줄어들고, 더 빠르게 제일 낮은 곳으로 갈 수 있어.
- 개선: SGD를 한 단계 더 똑똑하게 만든 거라고 생각하면 돼.
3. 아담 (Adam)
이게 진짜 중요해! 실무에서 제일 많이 써!
- 특징: 모멘텀처럼 이전 방향을 기억하는 데다가, 학습률까지 자동으로 조절해줘!
- 장점: 빠르고 안정적이야. 게다가 복잡한 튜닝 없이도 잘 작동해서 실무나 시험에서 기본값처럼 많이 사용돼.
옵티마이저 한눈에 비교!
| 옵티마이저 | 특징 | 장점 | 단점 |
| :--------- | :----------------------------------------- | :--------------------------------------- | :--------------------------------- |
| SGD | 현재 기울기만 보고 한 걸음 이동 | 기본적, 이해 쉬움 | 흔들리거나 느릴 수 있음 |
| 모멘텀 | 이전 이동 방향 기억 (관성) | 흔들림 줄고 수렴 속도 빨라짐 | SGD보다 복잡 |
| 아담 | 이전 방향 기억 + 학습률 자동 조절 | 빠르고 안정적, 튜닝 거의 불필요 | 가장 복잡 (하지만 제일 좋음) |
결론:
- SGD: 원리를 이해하기 위한 기본!
- SGD + 모멘텀: 좀 더 안정적이고 전통적인 방식.
- 아담: 빠르고 안정적이라 실전에서 제일 많이 씀!
딥러닝 학습 과정: 반복의 미학
딥러닝 모델이 학습하는 과정은 항상 이 순서로 반복돼.
- 입력이 들어온다.
- 모델이 예측한다.
- 손실 함수로 얼마나 틀렸는지 계산한다.
- 기울기를 계산한다.
- 옵티마이저를 사용해서 가중치를 변경한다.
즉, 손실 함수는 '얼마나 틀렸는지' 기준을 잡아주고, 옵티마이저는 그 기준을 줄여주는 역할을 하는 거야.
케라스에서 옵티마이저 사용하기
케라스에서는 모델을 만들 때 optimizer 부분을 설정해주면 돼. 예를 들어 아담을 쓰고 싶다면 이렇게!
model.compile(optimizer='adam', loss='mse', metrics=['accuracy'])
여기서 optimizer에 'sgd', 'adam', 'rmsprop' 등등 다양한 옵티마이저 이름을 넣어줄 수 있어.
왜 아담을 기본으로 쓸까?
대부분의 상황에서 아담이 가장 안정적이고 성능이 좋기 때문이야. SGD는 우리가 원리를 이해하기 위해 보는 거고, 옵티마이저만 바꿔도 모델 성능이 확 달라지는 경우가 많아!
마무리
오늘 우리는 딥러닝 모델이 어떻게 틀린 걸 고치고 점점 더 똑똑해지는지 배웠어.
- 경사 하강법: 손실을 줄이는 방향으로 이동하는 방법.
- 학습률: 얼마나 크게 이동할지 결정하는 값.
- 옵티마이저: 이동하는 전략 (SGD → 모멘텀 → 아담 순으로 똑똑해짐).
- 실무에서는 아담을 기본으로 많이 사용!
이제 여러분은 딥러닝 모델이 무엇을 기준으로 평가되고, 어떻게 틀린 만큼 수정되며, 어떤 방식으로 점점 더 좋아질 수 있는지 그 흐름을 이해하게 되었어!
여기까지 해서 이번 챕터 마무리할게! 수고했어!