지금 당장 급한 취준하고는 조금 동떨어져있지는 않을까 하지만 그래도 장기적으로 보았을때 MLOps를 준비한다면 알고가면 좋을것 같았고 실제로도 되게 책이 괜찮아서 머신러닝 디자인패턴에 대해서 조금씩 시간나면 챙겨보고 있었습니다. 다만 당장 제가 필요해서 보는거는 아니다보니 책 내용이 잘 들어오지 않고 좀 붕뜨는거 같아서 컴퓨터비전 부분만 정리를 하고 급한일부터 쳐내야 겠네요
소프트웨어공학에서 바퀴를 다시 개발하지 마라는 것 처럼 이미 잘 만들어진 오픈소스를 복붙하는 것은 흔한일이었는데 머신러닝서비스 부분에 있어서도 어느정도 성숙도가 올라가고 시행착오를 겪으며 어떤 환경(상황)에서는 이렇게 대응하라는 누가 알려주지는 않았지만 경험에 의해 누적된 매뉴얼과 규칙이 점점 생겨나고 있었습니다.
예를 들어 이진분류문제에서 데이터의 불균형이 심하다면 업샘플링이나 다운샘플링을 하라는 것 역시 하나의 디자인 패턴입니다.
컴퓨터비전은 이미지, 비디오, 아이콘, 픽셀등 다양한 시각입력을 이해하도록 기계학습하는 분야입니다. MRI를 사용하여 폐암을 감지하는 것부터 자율주행 심지어 그림까지 그려주는! 인간 시각에 의존하는 모든 작업을 목표로 합니다. 기존의 고전적인 응용프로그램은 이미지 분류, 동작 분석, 분할 노이즈 제거 등이 있습니다. 그리고 컴퓨터비전에서 주로 사용할 수 있는 디자인 패턴으로는 다음과 같은 것이 있습니다. 각 해결 방법은 입력을 어떻게 조절 한것인가 출력을 어떻게 할 것인가로 나누어 볼 수 있습니다.
1. 리프레이밍
첫번째는 리프레이밍입니다. 컴퓨터비전에서도 판별모델은 다시 두가지로 분류해볼 수 있는데 회귀모델과 분류모델 입니다. 그렇다면 회귀모델은 분류모델로 분류모델은 회귀모델로 다시 재구성(리프레이밍)을 시도해보는 것입니다.
2. 중립클래스
중립클래스 디자인 패턴은 이진 분류과제 예를 들면 예/아니오를 선택하는 것에서 아마도 또는 모름을 추가해 3개의 클래스 분류기를 학습시킬 수 있습니다. 물론 이 3가지 선택지는 모두 베타적인 성질을 가지고 있습니다.
책에서 든 예시는 진통제를 사용하는 이부프로펜과 아세트아미노펜이라는 두가지 선택지가 있는데 이부프로펜은 간손상 위험이 있는 환자에게 아세트아미노펜의 경우 위장문제가 있는 환자에게 처방을 합니다. 그러면 진통제를 처방해야하는데 둘다 상관없는 경우에는? 이때는 매우 무작위적이고 이진분류기로 학습을 하게되면 정확도가 떨어지게 됩니다. 그러니 필요한 경우 임의의 경우(아마도)까지 하나의 클래스로 지정해서 정확히 분류할 필요가 있습니다.
3. 멀티모달 입력
사용가능한 모든 데이터표현을 연결하여 복잡한 방식으로 표현할 수 있는 데이터 또는 다양한 유형의 데이터를 표현하는 문제를 해결합니다.
많은 모델의 경우 하나의 모델은 하나의 데이터 종류만 받게 정의가 되어 있습니다. Resnet-50에다가 이미지 이외에 다른 입력을 넣는다한들 아무런 처리를 할 수 없습니다.
텍스트 데이터는 임베딩, BOW 인코딩표현을 사용하며, 이미지를 결합하거나 메타데이터를 함께 사용합니다. 단점으로는 딥러닝 모델은 본질적으로 블랙박스이기 때문에 설명하기 어렵습니다. 그런데 멀티모달을 통해서 여러 인풋을 사용하게 되면 이를 해석하기 더더욱 난해할 수 있습니다.
4. 전이학습(Transfer Learning)
전이학습은 이전에 학습된 모델의 일부를 취해서 가중치를 고정시키고 이렇게 만든 학습할 수 없는 계층을 유사한 문제를 해결하는 새로운 모델에 통합합니다. 이때 새로운 모델은 더 작은 데이터셋으로 학습한 모델입니다.
5. 임베딩(embedding)
임베딩은 학습문제와 관련된 정보가 보존되는 방식으로 높은 카디널리티 데이터를 저차원 공간에 매핑하는, 학습 가능한 데이터표현의 일종입니다.
원핫인코딩, 라벨링도 임베딩 방법중 하나 입니다. 다만 위 그림 처럼 원핫인코딩을 수행하게 되면 밀도가 낮으며 공간을 많이 차지하게 됩니다. 그래서 임베딩 계층을 통해 보다 낮은 차원에서 큰 카디날리티를 가진 데이터를 밀집시켜서 표현하는 문제를 해결합니다.
클러스트링이나 주성분분석(PCA)과 같은 차원 감소 방법을 임베딩 계층으로 대체하는 것이 가능합니다.임베딩 가중치는 기본 모델의 학습 루프에서 결정되므로 미리 클러스터링하거나 PCA를 사용하지 않아도 되기 때문입니다.
예를 들어서 위 단어를 원핫인코딩을 하면 4개의 클래스로 분류가 되는데 이를 2차원 벡터형태로 매핑할 수 있습니다.
텍스트로 지금까지 설명을 했지만 이미지나 오디오 같은 원시 픽셀 또는 주파수 정보를 포함하는 여러 채널을 가진 고밀도의 고차원 벡터로 구성됩니다. 이런 데이터에 대한 임베딩은 낮은 차원 공간에서 입력과 관련된 표현을 형성합니다.
이메지 임베딩은 인셉션이나 레스넷등을 통해서 라벨이 포함된 데이터셋에서 먼저 학습이 이루어집니다. 그리고 소프트맥스 계층을 모델에서 제거합니다. 여기서 다른 모델을 사용하여 특징 벡터를 추출하며 이게 입력 이미지의 저차원 임베딩으로 대처할 수 있습니다.
6. 멀티라벨
주어진 학습데이터에 둘 이상의 라벨을 할당 할 수 있는 문제를 말합니다. 신경망에서는 최종 출력 계층에 사용되는 활성화함수를 변경하고 어플리케이션이 모델 출력을 어떻게 파싱할지 선택해야 합니다. 위 그림을 보듯이 멀티클래스 문제와는 사뭇다릅니다. 여러개중 하나가 아니라 여러개중 2개 이상의 라벨을 선택해야 합니다.
최종 출력 계층에서 시그모이드 함수를 사용하면 되며 손실함수는 그대로 이진 크로스엔트로피를 사용하면 됩니다. 하나의 모델에서 멀티라벨을 붙이는 것이 아니라 이진모델이 여러개 있는 것과 동일합니다.
멀티라벨 분류를 처리하는 또 다른 방식은 하나의 멀티라벨 모델 대신 여러 이진 분류기를 학습하는 것이고 이런 접근 방법을 OvR(One-versus-the-rest) 이라고 합니다. OvR의 이점은 서포트 벡터머신같이 이진분류만 수행할 수 있는 모델 아키텍쳐와 같이 사용 할 수 있습니다.
7. 캐스케이드(Cascade)
만약 일상적인 활동과 비정상적인 활동 모두에서 값을 예측해야한다면 비정상적인 활동은 적은 부분을 차지하기에 학습가능성은 낮습니다. 예를 들어서 고객이 반품할 가능성을 예측하고 싶은데 구매자와 재판매자 유형을 나누고 싶습니다.
일단 문제를 4개로 나눕니다.
특정 거래가 재판매자 것인지 예측(상황을 식별하는 분류모델)
일반구매자와 구매 데이터에 대한 하나의 모델을 학습(일반적인 상황에서 학습된 별도의 모델)
재판매자의 구메 데이터로 두번째 모델 학습(비정상적인 상황에서 학습된 하나의 모델)
프로덕션에서 세가지 개별 모델의 출력을 결합하여 판매된 모든 항목에 대한 반품 가능성과 재판매자가 반품할 가능성을 예측(최종 출력은 두 출력의 확률적 조합이기 때문에, 2개의 개별 모델의 출력을 결합하는 모델)
이렇게 구매자의 유형에 따라서 반품될 가능성이 있는 항목에 대해 서로 다른 결정을 내릴 수 있으며 2단계와 3단계의 모델이 서로 다른 학습 데이터를 가능한 정확히 나누어 사용할 수 있도록 보장 할 수 있으며 상대적으로 학습하기도 쉽다는 장점이 있습니다.
위 도표는 Haar 케스케이드를 이용하여 얼굴을 식별하는 과정을 표현한 것입니다.
다만 캐스케이드는 여러 상황에 대응할 수 있다는 장점은 있지만 머신러닝 워크플로우를 복잡하게 만들고 실제 성능이 떨어질 수 있습니다. 그래서 하나의 파이프라인에는 하나의 머신러닝 문제만을 할당해야 합니다. 동일한 파이프라인에 여러 머신러닝 모델을 사용하는 것은 권장하지 않습니다.
8. 2단계 예측
2단계 예측 디자인 패턴은 크고 복잡한 모델을 분산된 장치에 배포해야할 때 발생하는 성능유지 문제를 두단계로 분할한 사용 사례로 해결하는 디자인 패턴입니다. 특히 사용자가 항상 신뢰하는 네트워크에 접속한다는 보장이 없는 상황등을 가정하기 때문에 넘어가겠습니다.
짧막하게 적자면 내부적으로 오프라인에서 작동하는 가벼운 ML을 통해서 사전 분류를 하고 필요한 경우에만 온라인으로 결과를 받아오는 형태를 구축합니다.
Comments powered by Disqus.