sangmandu / SangSangPlus

Boostcamp NLP Team
2 stars 5 forks source link

[KLUE 대회] MADGRAD 결과에 대한 내용입니다. #120

Open whatchang opened 3 years ago

whatchang commented 3 years ago

huggingface train의 optimizers인자로 (optmizer, lr_shceduler)를 주면 해당 값을 train시 이용하게 됩니다.

MADGRAD는 상민님이 추천해준 optimizer로 2021년1월26일에 처음 소개된 방식입니다.

해당 방식을 이용하기 위해서 facebook research의 madgrad.py 코드를 이용하면 됩니다. https://github.com/facebookresearch/madgrad/blob/main/madgrad/madgrad.py

해당 코드를 복사하여 서버에 저장하고 아래와 같이 사용하면 됩니다(저는 optimizer.py로 저장하였습니다).

 from importlib import import_module

...

  optimizer = None
  lr_scheduler = None

  if args.optimizer != "defualt":
    opt_module = getattr(import_module('optimizer'), args.optimizer)
    optimizer = opt_module(model.parameters(), lr=args.lr)

  trainer = Trainer(
    model=model,                         # the instantiated 🤗 Transformers model to be trained
    args=training_args,                  # training arguments, defined above
    train_dataset=RE_train_dataset,         # training dataset
    eval_dataset=RE_valid_dataset,             # evaluation dataset
    compute_metrics=compute_metrics,         # define metrics function
    optimizers = (optimizer , lr_scheduler)
  )

결과

undersampling의 데이터로 MLM을 epoch 2 수행한 후 batch_size = 32, epoch = 4, oprimizer=madgrad를 사용하여 fine-tuning을 했을때 결과는 아래와 같습니다.

스크린샷 2021-10-03 오전 12 53 12

madgrad를 사용하지 않았을때와는 mircro_f1이 1.2, auprc는 0.3 정도 떨어졌습니다.

TMI 이것에 대해서 hugging face trainer코드를 분석하고 이해하는데 4~5시간 정도 걸린 것 같습니다 ㅠㅠ 시간이 오래 걸린 이유는 코드를 제대로 보고 이해한 후 넘어가야 했는데 빨리 적용시키고 싶은 마음에 대충대충 보고 빨리빨리 넘어 갔더니 코드에 대한 이해도가 떨어져서 자꾸 optimizers과 관련된 부분의 코드를 잘못 이해해서 시간이 오래 걸렸던 것 같습니다.....ㅠㅠㅠㅠㅠㅠㅠㅠ

SinGonKim commented 3 years ago

아 저도 이부분 계속 에러나서 하루 통째로 날렸는데 너무 대충대충 이해하려고 했던 것 같습니다! 좋은 자료 감사드리고 남은 일주일은 늦더라도 차분이 이해하면서 구현하는 노력을 해야겠습니다. 감사합니다.