Jost Do It.

그냥 IT해.

Study/딥러닝

[CS230] Deep Learning Lecture 6 Deep Learning Project Strategy

그냥하Jo. 2022. 9. 21. 09:59
반응형

CS230 Deep Learning

Lecture 6. Deep Learning Project Strategy

강의영상

 

 

 

 

 

이번 강의는 Ng 선생님께서 실제 딥러닝 프로젝트를 진행할 때 생각해볼 전략들에 대해 설명해주셨다.

 

강의노트는 따로 제공되지 않았다.

 

 

 

수업에서 왜 실제 프로젝트에서 사용할 전략들을 배워야 하는가?

 

  • 경험을 얻는 방법은 크게 두가지가 있다.

1. 실제 좋은 AI 팀에 들어가서 여러 문제들을 만나면서 경험하는 것 (매우 긴 시간이 걸림)

2. 수업에서 소개된 사례들을 생각하고 고민하면서 해법들을 배우는 것 (매우 짧은 시간)

 

 

1번의 고민을 한 사람들의 생각과 해결법들을 빠르게 배울 수 있기 때문에 수업에서 전략들을 배우는 것이 큰 도움이 된다.

 

 

 

  • 효율적인 스타트업 팀이 프로젝트를 진행할 때 어떤 식으로 진행하는지 생각해볼 수 있다.
    • 빠르게 프로토타이핑하고, 이를 개선하는 과정이 필요하다.
    • 예를들어 데이터 수집을 오늘까지 마치는 것과 내일까지 미루는 것을 생각해보자.
    • 나에게는 하루가 빨라지는 것이 크지 않을 수 있다.
    • 하지만 1년의 과정으로 보면 회사가 경쟁자들의 ML 알고리즘 발전 속도보다 2배 빠른 것이다.
    • 이는 마켓에서 회사가 경쟁적인 지위를 차지하는 것을 가능하게 한다.

 

 

 

 

 

머신러닝 알고리즘을 개발하는 과정

 

  • 소프트웨어를 디버깅하는 과정과 비슷하다.
  • 버그가 발생하면 해결하고, 이로 인해 발생한 버그를 또 해결하는 과정이 반복된다.
  • 여기서 버그는 특정 데이터셋이나 새로운 데이터에 기존 알고리즘이 동작하지 않는 것을 의미한다.
  • 해결 방법은 모델 구조 변경, 하이퍼파라미터 변경, 데이터 추가 등이 있을 수 있다.

 

 

 

 

당신이 CEO라면 어떻게 효율적으로 머신러닝 프로젝트를 진행할 것인가?

 

이번 수업에서는 전반적으로 내가 CEO라면 ML팀을 어떻게 꾸리고 운영할 것인가에 대해 생각하는 시간이었다.

 

Trigger word를 통해 음성 인식을 하는 예시를 생각해보자.

 

만약 "Robert, Turn On" (RTO)라는 문장을 인식하는 ML 알고리즘을 개발한다고 하자.

 

 

이 때 아래 질문들을 어떻게 답할 것인지 생각해보자.

 

 

 

 

 

Q1. RTO를 탐지하는 ML 알고리즘을 어떻게 개발할 것인가?

 

  • 존 논문, 관련된 코드, 블로그 글(Medium, git블로그 등)을 참고할 수 있다.

 

  • 관련 글들은 하나씩 이해하는거 보다는 병렬적으로 한꺼번에 여러개 읽는게 좋을 수 있다.
    • 각 글들을 skimming하면서 정리가 잘된 글들은 깊게 읽으면서 처음에는 내용을 전반적으로 파악하자.
    • 비슷한 내용이 계속 반복되는걸 보면서 해당 분야에 대해서 파악할 수 있게 된다.

 

  • 이해 안되는 글이나, 코드, 블로그 글이 있으면 어떻게 해야할까?
    • 처음에는 이해하려고 노력하자. 간단한 부분에 대한 스스로의 고민은 필요하다.
    • 그래도 도저히 이해가 어려우면 저자에게 메일을 써보자.
    • 답장받지 않을 확률도 있지만 저자에게 직접 물어보는건 충분히 시간을 들일 가치가 있다.

 

  • Research Paper 에 best 알고리즘이라는 정답이 존재하지 않기 때문에 여러 paper들을 참고하는게 중요하다.

 

 

Q2. 데이터를 어떻게 Collect 할 것인가?, 무슨 데이터가 필요한가?

 

  • RTO라는 문장을 말하는 데이터가 필요하다.

 

  • 각 사람에게 RTO를 말해달라고 부탁해서 10초 길이의 100개 녹음을 모으자.
    • 10명에게 10 clips를 받을수도, 개인 100명에게 각 1 clip을 받을 수도 있다.
    • 10초간 길이에서 RTO가 나온 부분(2 ~ 4초) 직후는 1로 라벨링, 그 외는 0으로 라벨링 할 수 있다.

 

  • 데이터를 Train과 Dev로 나누어서 모델을 학습, 평가하자. 여기서 Test는 굳이 필요하지 않다.
    • 빠른 개발이 중요하다. 논문 작성도 아니고 굳이 Test까지 나누어서 데이터를 loss 시킬 필요가 없다.
    • 특히 프로토타이핑에는 빠르게 데이터를 모으고 모델링하여서 이를 개선하는게 중요하다.

 

  • 각 클립에서 임의의 지점에서 3초 구간을 30개 가져온다. 이를 통해서 3초 길이의 학습데이터 3,000개를 만들 수 있다.
    • Training data: 100 clips * 30개 (clip의 길이: 3초)

 

  • Data Augmentation을 진행한다. 이는 모델 variance를 줄여주고 모델 결과를 강건하게 만들어 줄 수 있다.
    • 하지만 처음부터 Data augmentation을 진행할 필요는 없다.
    • 모델의 결과에 high variance가 있다는 증거가 먼저 있고, augmentation에 시간을 들일 필요가 있음이 먼저 증명되어야 한다.

 

 

 

Q3. 알고리즘의 성능이 99.5%로 매우 좋게 나온다. 하지만 분석해보니 알고리즘은 모든 데이터의 결과를 0으로 예측한다. 이를 어떻게 해결할 것인가?

  • 현재 클립에는 라벨이 0으로 기재된 경우가 너무 많다. 이는 RTO가 나온 직후만 1로 라벨링되기 때문이다.
    • 알고리즘의 성능이 99.5%로 나와도, 다 0으로 예측해서 99%일 수 있다.

 

  • 이 문제에서는 성능 metric을 accuracy로 사용하는 것이 바람지갛지 않다. 문제에 적합한 evaluation metric을 사용하자.
    • precision, recall, f1 score 등을 고려할 수 있다.

 

  • Data Resampling을 하여서 class가 1인 비율을 증가시킨다.
    • Resampling의 문제는 라벨이 0인 많은 sample들을 버리게 되는 것이다.
    • 해당 데이터들은 학습에 좋은 샘플들일 수 있는데, 사용되지 못한다는 한계가 있다.

 

  • RTO가 나오고 0.5초 정도를 다 1로 라벨링 해줘서 class imbalance 상황을 어느정도 해소할 수 있다.

 

 

Q4. 알고리즘이 학습 데이터에 Overfitting 했다. 어떻게 할 것인가?

  • 알고리즘 성능이 학습 데이터에서는 98%, dev 데이터에서는 50%가 나온다. 확실히 overfitting 된 것으로 보인다.
    • Data augmentation을 통해서 데이터 수를 증강시키자.

 

  • RTO가 나오는 구간의 음성을 따오자. 그리고 뒤에 랜덤한 배경 노이즈를 추가해서 데이터를 생성한다.
    • 랜덤한 노이즈는 친구 집, 지하철 소음, 도서관 소음 등을 사용할 수 있다.

 

  • 다른 random word나 sentence를 이용해서 데이터를 생성할 수 있다.
    • I'm hungry와 같이 RTO와 상관없는 문장을 이용해 데이터를 생성한다.

 

 

  • Background noise 데이터를 모을 때 다음과 같은 옵션이 있을 수 있다.
    • 팀원들이 주변을 돌아다니면서 실제 데이터 녹음하기
    • 온라인에서 노이즈 데이터 다운로드 하기
    • 심부름 센터를 통해서 데이터 모으기

 

 

  • 10시간의 background noise를 모으려면 얼마나 걸릴까?
    • 실제 데이터를 녹음하는거는 팀원들이 돌아다니면서 모으니까 짧게 걸린다. 또한 데이터의 퀄리티도 보장된다.
    • 온라인에서 다운받는건 쉬워보이지만, 노이즈가 괜찮은지 검증하는 작업이 필요하다. 완전 10시간동안 반복되지 않는 노이즈인지, 1시간마다 반복된 노이즈인지 등 퀄리티의 문제가 있을 수 있다. 따라서 검증 작업이 길게 걸리며 데이터 퀄리티도 확실하지 않다.
    • 심부름 센터 데이터 퀄리티가 보장될 수는 있으나 시간이 매우 오래걸린다

 

따라서 효율적으로 초기에 모델개발 및 프로토타이핑을 빠르게 진행하려면 실제 데이터를 녹음해서 모델링부터 하는게 중요하다고 할 수 있다.

반응형