• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

하이퍼 파라미터 튜닝 관련 질문입니다.

22.11.03 09:30 작성 조회수 231

0

안녕하세요.

강의는 필요한만큼 듣고 내용을 실제 적용해 보는 중인데, 하이퍼파라미터 때문에 뇌가 터질것 같습니다.

중구난방 흩어져있는 정보도 그렇고..파이썬래퍼와 사이킷런래퍼 이름 찾는것도 그렇고.. 뭐 그래도 이제 슬슬 정리는 되가고 있는데... 근본적인 문제에 도착했습니다.

일단 튜닝 방법론으로 두가지를 생각했습니다.

  1. 알려진 중요도와 상관관계에 따라 덩어리 별로 튜닝한다.
    - 진행하지 않은것은 디폴트로
    - 결과가 나온것은 명시적으로 픽스

  2. 조절하려는 파라미터를 전체 튜닝 한 후 그중 높은 중요도 순으로 개별 튜닝한다.

지금 돌려보고는 있는 중인데...(참 하세월이네요. ㅠ_ㅠ) 로그 찍히는걸 보고 있자니 의문이 드는 겁니다. 하이퍼파라미터가 독립적으로 작용하지 않고, 서로에게 영향을 주고, 과적합을 막기도 하고 있는데...

1번의 경우는 먼저 진행한것들이 기타 파라미터들이 정해지지 않은 상태에서 튜닝이 되고... 그 뒤에 나머지 들이 정해진다면, 먼저 정해진 것이 나중에 정해진 것들에 영향을 받기에 다시 튜닝 해야하는거 아닌가? 그리고 초반에 튜닝 한것들을 이런 연유로 수정하고 나면 그 뒤에 것들도 다시 해야해서 결국은 무한 루프에 빠지게 됩니다.

2번도 결국 비슷한 이야긴데... 전체를 적절히 튜닝하고 난 후에(전체적으로 조화로운 상태에서) 그중 특정 파라미터를 튜닝하는 것이 과연 맞는 것인지...

(슈퍼컴퓨터를 사서 모든 경우의 수를 다 뒤지는게 정답일까요? ㅠ_ㅠ)

어째건... 제가 궁금한 것은 내가 생각해낸 방법론은 과연 효율적인가? 그리고 무한루프 돌지 않고 적정선에서 빠져나가는 방법이 있을까? 입니다.

아 그리고 lightbgm 기준으로 아래와 같은 3덩어리를 순서대로 튜닝한다 면 어떤 순서가 가장 다른 파라미터에 영향을 덜 받을 까요?

1. learning_rate, num_boost_rounds
2. max_depth , num_leaves
3. etc

강의 잘 들었고... CNN강의도 잘 듣고 있습니다.(CNN 파라미터 튜닝은 또 어떻게 할지 미리부터 걱정이네요. ㅠ_ㅠ)

진심으로 감사드립니다.

답변 1

답변을 작성해보세요.

0

안녕하십니까,

하이퍼파라미터가 독립적으로 작용하지 않고, 서로에게 영향을 주고, 과적합을 막기도 하고 있는데...

1번의 경우는 먼저 진행한것들이 기타 파라미터들이 정해지지 않은 상태에서 튜닝이 되고... 그 뒤에 나머지 들이 정해진다면, 먼저 정해진 것이 나중에 정해진 것들에 영향을 받기에 다시 튜닝 해야하는거 아닌가? 그리고 초반에 튜닝 한것들을 이런 연유로 수정하고 나면 그 뒤에 것들도 다시 해야해서 결국은 무한 루프에 빠지게 됩니다

=> 네 맞습니다. 먼저 정해진 하이퍼 파라미터가 나중에 정해진 것들에 영향을 받을 수 있기에 다시 튜닝해야 하는 압박감(?)에 시달릴 수 있습니다.

보통은 중요한 파라미터 부터 진행을 하는 것이 경험적으로 보다 효과적인것 같습니다. 가령 LightGBM으로 한다면 num_leaves, max_depth, colsample_bytree, subsample 등으로 먼저 최적화 한 뒤에 다음에 min_child_samples, reg_lambda, reg_alpha등을 시도하고, 마지막으로 learning_rate등을 조절합니다.

하지만 이 방법 역시 시간이 오래 걸리고, LightGBM/XGBoost같은 경우는 4장에서 설명드린 베이지안 최적화로 최적 하이퍼 파라미터를 찾는게 가장 좋은 것 같습니다.

마지막으로 당부드리고 싶은건, 하이퍼 파라미터에 대한 튜닝 압박감을 내려놓는것도 필요합니다. LightGBM의 경우 하이퍼 파라미터 튜닝을 하더라도 성능이 그렇게 높아지지 않습니다. Kaggle과 같은 Competition이 아닌 이상 어느 정도 수준까지만 LightGBM 튜닝을 하시면 충분할 것 입니다.

감사합니다.

nobert님의 프로필

nobert

질문자

2022.11.04

답변 감사드립니다.

며칠전 코딱지만큼 좋아진 그래픽카드가 와서 cuda 깔고 엄청나게 돌리고 있는데...
(아.. 위에 언급을 안 했었네요. optuna를 돌리고 있습니다.)

말씀하신것처럼 별로 좋아지질 않네요. 쩝
하지만 적절한 가이드를 주셔서 마음이 편안해 졌습니다. ^_^

그리고 learning_rate를 언급하셔서 이어지는 질문인데....

CNN강의 에서 말씀하신 옵티마이저 부분과 연계해 본다면...
글로벌 미니멈을 찾기 위해서라면...
learning_rate는 작게, n_estimators는 많이, stopping_rounds는 길게 해서
시간이 걸려도 최적값을 찾아 보는게 어떨까 싶은데....
딥러닝의 로스함수 미니멈 찾는것과는 다른 개념일까요?

 

주변에 공부하는 사람도 없고 인터넷도 한계가 있어서 물어볼데가 없는데...
가뭄에 단비같은 강의와 답변 진심으로 감사드립니다.

learning_rate는 작게, n_estimators는 많이, stopping_rounds는 길게 해서
시간이 걸려도 최적값을 찾아 보는게 어떨까 싶은데....

=> 네 맞습니다. 보통 그렇게 최적값을 찾습니다. 다만 성능향상이 눈에 띌 정도는 아닙니다.

감사합니다.

nobert님의 프로필

nobert

질문자

2022.11.06

답변 감사드립니다.