부스트캠프 7주차

TAEJUN YOUN·2022년 11월 6일
0

이번 프로젝트에서 나의 목표는 무엇이었는가?

깃허브를 이용하고 컨벤션을 정해서 그에 맞게 팀원들과 협업해보기
가설을 많이 세우고 실험을 통해 좋은 모델을 만들기 위해 어떻게 해야하는지
안다고 착각하는 것이 가장 중요하므로 창피하다고 생각하지 말고 의견을 많이 제시하고 많이 실수하고 많이 물어봐서 확실히 알고 넘어가기
멘토링과 수업에서 모두 EDA를 많이 강조했기 때문에 시각화를 통해 인사이트를 많이 얻어내기
전체적인 머신러닝 파이프라인과 베이스라인 코드를 완벽히 이해하기
가능하면 최신 논문을 구현하여 좋은 결과물을 만들어내기

나는 내 학습목표를 달성하기 위해 무엇을 어떻게 했는가?

깃허브를 이용해서 남들과 협업하는 것이 처음이었기 때문에 협업을 어떻게 할 것인지 대해서 고민을 많이했다. Git Flow를 프로젝트에 적용하기 위해 브랜치와 커밋 컨벤션을 프로젝트 성향에 맞게 적용하여서 프로젝트가 마무리 될 때 까지 문제없이 잘 적용될 수 있었다. 또한 깃허브를 사용하면서 혼자 해결할 수 없겠다고 생각한 부분에 대해서 팀원들에게 수시로 물어보고 이를 잘 습득해 확실히 깃허브 사용이 숙달되었다.
내가 짠 코드를 검증받고 문제가 생긴 부분에 대해 디버깅을 하기 위해 팀원들과 화면을 공유하면서 문제가 생긴 부분에서 코드를 같이 수정했다. 코딩실력을 보여주는 것이 부끄럽기도 했지만 서로 도움주고 도움을 받아 팀원에게 많이 배울 수 있었다.
늦은시간까지 프로젝트를 진행하다보면 서로 예민해질 수 있고 그렇게 되면 서로 의견 제시하고 실수가 두려워질 수 있다. 스몰톡이나 일부로 서로 장난을 치면서 밝은 분위기에서 프로젝트를 진행할 수 있도록 했다.
공부도 하고 모델의 성능을 높힐 겸, 모델의 성능을 높이는 방법 중 ensemble의 soft voting, weighted voting을 다른 패키지를 사용하지 않고 남이 작성한 코드를 그대로 쓰지 않고 직접 구현했다.

나는 어떤 방식으로 모델을 개선했는가? 그리고 어떠한 깨달음을 얻었는가?

각각 상황에서 생기는 문제를 정의하고, 이를 해결하기 위해 여러 방법을 도입했다. 첫번째 문제는 dataset이 imbalanced하기 때문에 이를 보정해줄 수 있는 Sampler 모듈을 만들고 Random Weighted Sampler를 적용했다. 하지만 Weighted Random Sampler를 적용하면 오히려 데이터가 부족한 60세 이상의 성능이 감소한다는 것을 알게 되었다. 즉 같은 데이터를 여러번 뽑고 사람 얼굴이라는 특성으로 Augmentation을 강하게 할 수 없었던 이유 때문에 오버피팅이 날 수밖에 없었다. 그래서 노화는 연속적인 특성이기 때문에 60세 이상이 아닌 그보다 나이가 적은 58세 이상으로 모델을 학습시켜 Sampler를 이용한 성능 향상이 있는 것을 확인했다. 하이퍼 파라미터를 바꿀 때 어떻게 작동하는지 확인하고 적용해야한다는 것을 알았다.

앙상블 모델이 성능 향상에 좋다는 논문을 보고, 앙상블 방법 중 Soft Voting과 weighted voting을 직접 구현해보았다. 논문에 구현된 방법을 코드로 구현하고 팀원과 검증 받아 함께 사용할 수 있었다. 잘 실행이 될지 궁금했지만 실제 성능이 향상된 것을 확인해볼 수 있었다.

마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?

k-fold 구현도 직접 해보고 싶었지만 시간이 부족하여 잘 작동하는지 확인해보지 못했고, CNN visualization을 이용해 모델이 왜 성능이 그런지 확인해보고 싶었다. 하지만 이 또한 시간이 부족하여 시도해보지 못했다.

실험을 계획하고 관리하는 것이 쉬울 줄 알았지만 생각보다 쉽진 않았다. 하이퍼파라미터나 모델을 한번에 두개 이상 바꾸면 성능 향상에 어떤 인자가 영향을 끼치는지 알 수 없게 되었다. 실험을 할 때 특정 인자에 대해서만 수준을 바꿔 실험하는 것이 좋다고 생각한다.

막상 compitition으로 조급했던 맘이 있었던 것 같다. EDA를 열심히하자 했지만 실제로 적극적으로 시각화하지 못했던 것이 아쉬웠다.

Optimizer, Scheduler, loss function 등이 어떻게 작동되는지 모르고 무작정 적용했다. 공부를 하고 적용했다면 성능이 왜 좋아졌는지, 왜 나빠졌는지 이해하는데 좋았을 것 같다.

한계/교훈을 바탕으로 다음 프로젝트에서 스스로 새롭게 시도해볼 것은 무엇일까?

  1. 새로운 것을 적용하기 전에 그것이 어떤 문제를 해결하기 위해 만들어진 것인지, 어떤 효과가 있는지 공부하기
  2. 실험 계획을 하고 체계적으로 이를 정리하여 어떤 효과가 있었는지 확인하기
  3. 베이스라인 코드를 꼼꼼히 확인하여 코드에 문제가 없는지, 그리고 어떻게 돌아가는지 확실히 이해하기
  4. 가설을 많이 세우고 시각화를 통해 이를 확인하기
profile
Study and Share

0개의 댓글