Inflearn brand logo image

인프런 커뮤니티 질문&답변

훈님의 프로필 이미지

작성한 질문수

딥러닝 CNN 완벽 가이드 - Pytorch 버전

StepLR과 CycleLR 이해

lr_scheduler 관련 질문 있습니다.

작성

·

63

0

안녕허세요.

강의 잘 보고 있습니다.

옵티마이저 Adam과 RMSprop 은 자동으로 lr 를 조정한다고 배운 것 같습니다. lr_scheduler 이하 모듈들의 lr 조정과 차이가 무엇인가요?

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

learning rate scheduler는 epoch 단위로 기본 learning rate를 조절합니다.

optimizer가 learning rate를 적용할 때는 기본 learning rate에 batch 수행시 마다 과거 Gradient값에 기반한 지수 가중 평균 계수를 함께 적용하여 learning rate를 재 계산하게 됩니다. 그러니까 기본 learning rate는 그대로 있고 지수 가중 평균 계수만 계속 update하면서 새롭게 learning rate를 재 계산하는 것입니다. (적용 learning rate는 기본 learning rate / 지수 가중 평균 계수의 제곱근)

 

예를 들어 초기 learning rate가 0.01이고 optimizer는 Adam, learning rate scheduler가 StepLR로 10회마다 절반(0.5)를 줄인다고 가정하면,

첫번째 epoch시에는 기본 learning rate가 0.01로 적용되는데 optimizer가 이 기본 learning rate를 기반으로 batch 레벨로 Gradient를 적용할 때마다 동적으로 지수가중 평균 계수를 구하고 이걸 기본 learning rate를 나눠서(적용 learning rate는 기본 learning rate / 지수 가중 평균 계수의 제곱근) learning rate를 Gradient에 적용하여 가중치를 update하게 됩니다.

두번째 epoch시 역시 기본 learning rate는 0.01입니다. 그리고 지수 가중 평균 계수는 optimizer가 이전 epoch까지 함께 포함해서 계속 계산하게 됩니다. optimizer는 epoch와 관계없이 batch 수행 시마다 연속적으로 계속 계산하게 됩니다.

아홉번째 epoch까지 기본 learning rate는 0.01 입니다. 그리고 지수 가중 평균 계수는 optimizer가 계속 갱신하면서 적용 learning rate 값을 계산해서 가중치를 update합니다 .

이제 10번째 epoch시에 기본 learning rate는 learning rate scheduler에서 0.01에서 0.005로 줄이게 됩니다. 이때 Optimizer는 기본 learning rate는 0.005로 적용합니다. 하지만 지수 가중 평균 계수는 이전에 구했던 값을 연속해서 계산하여 적용하게 됩니다.

 

요약드리자면 optimizer는 가중치 update에 적용될 learning rate를 구할때 기본 learning rate에 지수가중 평균 계수를 적용하게 되며 이는 batch 레벨로 가중치 update 시마다 수행됩니다. learning rate scheduler 는 epoch 시마다 기본 learning rate를 어떻게 변경할 것인가에 대한 정책을 설정하는 것입니다. 실제 가중치 update에 적용될 learning rate는 optimizer에서 이 기본 learning rate에 batch level로 지수 가중평균 계수등을 감안하여 계산하게 됩니다.

 

생각해보니 이걸 강의만들때 말씀드린다는게, optimizer하고 learning rate scheduler 강의 간격이 있다보니 깜빡 잊고 말씀을 못 드린것 같습니다.

 

좋은 질문 감사합니다.

 

0

안녕하세요, 인프런 AI 인턴입니다.

훈님, 옵티마이저인 Adam과 RMSprop은 학습 중 자동으로 학습률(LR)을 조정하는 기능을 포함하고 있습니다. 이러한 옵티마이저들은 변화하는 기울기에 따라 학습률을 조정하여 최적화 과정을 향상시킵니다. 이를 통해 매개변수를 효과적으로 조정하여 수렴 속도를 높일 수 있습니다.

반면에 lr_scheduler 모듈은 학습률을 에폭(epoch) 수준에서 좀 더 정밀하게 조정하기 위한 방법을 제공합니다. 이를 통해 특정 시점마다 학습률을 감소시켜 모델이 최종 최적값으로 더 잘 수렴할 수 있도록 돕습니다. 예를 들어 ReduceLROnPlateau는 모델의 검증 손실이 향상되지 않을 때 학습률을 줄입니다. 이와 달리 옵티마이저의 내부 조정은 일반적으로 개별 배치(batch) 수준에서 이루어집니다.

더 자세한 내용을 알고 싶으시면 다음 유사 질문 및 답변을 확인해 보시기 바랍니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

훈님의 프로필 이미지

작성한 질문수

질문하기