ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Structuring Machine Learning Projects - 2 week
    Google ML Bootcamp 2022/Coursera mission 2022. 7. 16. 19:20

    Carrying Out Error Analysis

    알고리즘이 인간 수준보다 떨어질 때, 수동으로 점검하며 다음으로 무엇을 해야 할지 알 수 있다

    이러한 절차를 오류 분석이라고 한다

    고양이 분류기를 보며 개를 고양이라 인식한다면, 이 부분에 집중해서 고친다

    일단 개선하기 전에 얼마나 개선 가능한지, 최대 성능 상한(ceiling)을 알아야 한다

    100개 중 5개가 개 라면 5%의 성능 상한, 최대로 개선해서 얻을 수 있는 것을 알 수 있다

    이러한 과정을 통해 아이디어의 효율성을 알아내고 시작하는게 좋다

    이런 저런 아이디어

    이런저런 아이디어를 보며 효율이 좋은 것을 우선순위로 하는 게 좋다

    Cleaning Up Incorrectly Labeled Data

    지도 학습 문제의 데이터는 X,Y 라벨로 이루어져 있다

    만약 결괏값 데이터가 잘못 되었다면(incorrect label) 어떻게 해야 할까

    (모델이 잘못된 결과를 예측 할 때는 mislabel label이라는 단어를 사용했다)

    사실 DL은 random error에 꽤 강하기에 너무 많지만 않으면 그냥 둬도 된다

    (random error-어쩌다 되는 건 상관없음, system error-맨날 흰 강아지를 고양이라 하면 고양이라 판단하니 문제)

    dev/test 셋의 에러는 모델이 멀쩡함에도 잘못되었다고 판단할 가능성을 만든다

    그렇기에 위에 아이디어에 잘못 표기됨과 같은 항을 추가해 개선하자

    overall dev set error에서 errors due incorrect labels과 erros due to other causes의 비율을 보고 정하자

    • dev/test set에 동일한 처리를 해주어 분포가 변하지 않도록 해줘야 한다
    • 예제를 잘 살펴보며(맞은것과 틀린 것 모두), 뭘 고쳐야 하는지  잘 보고 검증해야 한다
    • train에선 dev/test와 조금 다른 분포를 가질 수도 있다

    Build your First System Quickly, then Iterate

    모델을 개선할 수 있는 방향은 아주아주 많다

    그렇기에 어떤 방법을 선택하고, 집중하는지 선택하는 것이 중요하다

    학습 알고리즘을 구현하며 추천하시는 방법이 있다고 한다

    일단 처음 dev/test set 과 metric을 뭐든 빠르게 만들고, 초기 모델을 만들고 일단 반복시킨다

    그리고 오류 분석을 하며 다음 우선순위를 선택한다

    초기 시스템이 좀 추하더라도 일단 만드는 게 좋다고 한다

    처음에 너무 과한 고민이나, 너무 복잡하게 만들려 하면 오히려 시간이 오래 걸릴 수 있다고 한다

     

     

    Training and Testing on Different Distributions

    DL은 데이터가 많이 필요하다

    더 많은 훈련 데이터를 얻기 위해 가능한 많은 데이터를 수집한다

    이 과정에서 dev/test 셋과 다른 분포를 가질 수 있다

    고양이 이미지를 휴대폰으로 찍어 판별하는 제작을 예시로 보자

    캐논으로 찍은 초초 고화질의 고양이 이미지 20만 개,  휴대폰 저화질 1만 개를 데이터로 얻었다고 하자

    고화질과 저화질 이미지

    만약 균등하게 train/dev/test에 분리한다면 고화질 이미지의 비율이 높은 걸이다

    dev/test에는 우리가 목표로 한 이미지는 5% 정도에 불과하다

    따라서 다르게 set을 분리하다

    train은 고화질로만 시키고, dev/test에는 우리가 목표로한 이미지만 넣는다

    목표로 한 것이 dev/test에 위치하니 적절해 보인다

    Bias and Variance with Mismatched Data Distributions

    distribution이 다르면 bias/variance 분석 방법이 조금 달리잔다

    dev set에서 에러가 높더라도, variance가 높은지 그냥 분포가 달라 높은지 파악하기 어렵다

    train-dev set을 새로 만들어서 이 문제를 해결한다

    train set과 분포가 같지만 학습에 사용하지 않은 데이터 셋이다

    train error 1% 1%
    train-dev error 9% 1.5%
    dev error 10% 10%

    왼쪽의 경우 variance 문제고, 오른쪽은 데이터 분포가 달라 mismatching 되기에 발생하는 문제이다

    human level, train set, train-dev set, dev set, test eror

    순서대로 각각 사이의 차이를 avoidable bias, variance, data mismatch, degree of overfit to dev set이라 한다

    이런 표를 채워보는 것은 종종 도움이 된다고 하신다

    사실 데이터 불일치를 처리하는 정말 좋거나 체계적인 방법은 없다고 한다

    Addressing Data Mismatch

    데이터 불일치 문제가 발생하면, 주로 수동 오류 분석을 수행하고 차이를 이해하려고 하자

    dev의 특징을 찾아 training data를 더 비슷하게 만들어야 한다

    예를 들어 잡음 없는 음성에 일부러 잡음을 합성해 데이터로 사용한다

    물론 소음 또한 과적합 문제가 있다는 점을 기억해야 한다

    그러나 모든 케이스 중 일부만 합성할 수 있다

    즉 전체 집합 중 일부만 시뮬레이션하고 모두 했다고 착각할 수 있다

     

     

    Transfer Learning

    딥러닝은 한 업무에서 학습한 지식을 다른 업무에 활용할 수 있다

    이것을 전이 학습(transfer learning)이라고 한다

    고양이 이미지 판별 모델을 엑스레이에 활용한다 해보자

    고양이가 학습된 모델의 (pre-training) 마지막 한 두 개 레이어만 재 학습시킨다  (fine-tuning)

    이때 마지막 레이어를 삭제하고, 가중치도 다시 무작위로 초기화해야한다

    물론 많다면 모든 레이어를 재 학습시켜도 된다

    필요하다면 마지막 레이어를 삭제하고, 하나의 노드가 아닌 레이어들을 붙여도 된다

     

    전이 학습은 나중 데이터가 충분하지 않고 적을 경우에도 학습이 가능하다는 장점이 있다(고양이 이미지>>영상의학 이미지)

    그러나 바꾸고자 하는 이미지가 더 많다면, 조금 학습시킨 내용은 별로 도움이 되지 않을 것이다 (고양이 이미지<<영상의학 이미지)

    언제 transfer learning이 의미 있는지(B 학습에 도움이 되는지) 정리해보자 (transfer A->B)

    • A, B의 입력이 동일한 x이다
    • A의 데이터가 B에 비해 많다
    • A의 저 레벨 특징이, B 학습에 도움이 된다 (고양이 이미지-> 암, 음성 번역-> 오케이 구글)

    Multi-task Learning

    자율주행 자동차를 만든다고 해보자

    보행자, 다른 자동차, 정지 신호, 신호나 기타 등등도 파악해야 할 것이다

    STOP, 자동차가 있고, 보행자가 없고...

    이런 경우 하나의 출력이 아닌 여러 가지 출력이 필요하다 \(y^{(i)}\)

    하나의 이미지가 다수의 라벨을 가진다는 것이 소프트 맥스 회귀와의 차이점이다

    물론 각각을 따로 학습시킬 수도 있지만, 라벨 간 공유할 수 있는 것들 때문에 합쳐 학습시키는 게 보통 빠르다

    \(Y\)에 일부 정보가 라벨링 되지 않더라도 학습이 가능하다

    자 그렇다면 multi-task learning은 언제 효과적일까

    • 비슷한 저 레벨 특징을 공유 할 때
    • 각 task가 보유한 데이터의 양이 비슷할 때(항상은 아니고 보통)
    • 모든 task를 잘할 정도로 큰 NN을 학습시킬 때

    컴퓨터 비전에 주로 이용된다

    What is End-to-end Deep Learning?

    End-to-end DL은 여러 단계를 처리하는 학습 시스템을 하나의 신경망으로 변환하는 것이다

    위 여러 단계를 압축한다

    end-to-end dl은 기존에 비해 많은 데이터가 필요하다

    신원 확인하는 예제를 살펴보자

    귀여운 머리 스타일

    이미지를 보고 바로 신원을 확인하는 것은, 거리 각도에 따라 어려움이 많을 수 있다

    먼저 이미지에서 얼굴을 찾고, 얼굴을 확대해 다시 비교, 확인하는 것이 더 효과적이다

    효과적인 데에 몇 가지 이유가 있다

    먼저 각 하위 단계에서 문제는 단순해진다 (얼굴 찾기, 얼굴 비교)

    또한 데이터가 더 많아진다 (단순한 문제니 당연히 많겠지..)

    Whether to use End-to-end Deep Learning

    end to end DL의 장단점을 알아보자

    장점

    • 데이터를 순수하게 반영할 수 있다 (사람의 선입견이 작용하지 않는다)
    • 구성요소를 직접 설계하는 일이 적다

    단점

    • 데이터가 많이 필요하다 (X, Y end to end 입력의 끝, 출력의 끝 모두 있는 데이터가 필요하다)
    • 잠재적으로 유용할 수 있는 수제 설계 요소를 배제한다

    결국 x와 y를 매핑할 만큼 충분한 데이터가 있는지가 중요하다

     

    댓글

Designed by Tistory.