인공지능/Tensorflow Extended

    [살아 움직이는 머신러닝 파이프라인 설계] 8. 모델 분석 및 검증

    머신러닝 모델을 배포하는 세가지 방법 학습된 머신러닝 모델을 배포하는 방법은 보통 세가지가 있다. 가장 많이 사용하는 방법은 모델 서버를 따로 두어 사용자 요청과 함께 들어온 입력 샘플을 받아 모델 예측을 수행한다. 하지만 입력 샘플이나 사용자 요청에 개인 정보가 들어있어 서버로 보낼 수 없는 상황에서는 모델 서버 대신 클라이언트의 브라우저에서 모델 예측을 수행하는 방법을 사용한다. 이 방법은 웹 페이지와 함께 모델을 함께 보내 브라우저에서 직접 실행한다. 마지막으로 모델 서버와 클라이언트의 연결을 보장할 수 없는 경우에는 에지 장치를 두는 방법도 선택할 수 있다. 파이썬 API 서버로 배포시 단점 Flask나 Django와 같은 프레임워크로 서버를 만들어 모델을 배포할 수 있다. 하지만 이러한 방식에는..

    [살아 움직이는 머신러닝 파이프라인 설계] 7. 모델 분석 및 검증

    모델 검증이 필요한 이유 모델 성능은 모델을 학습할 때도 확인할 수 있다. 모델을 학습하는 동안 우리는 정확도나 손실함수 값을 통해 얼마나 잘 학습하고 있는지 확인한다. 하지만 이를 통해 모델의 세부적인 성능을 평가한다고 할 수 없다. 첫번째로 하나의 성능지표만으로는 모델이 복잡한 비즈니스 문제를 해결할 수 있다고 보장할 수 없습니다. 특히 데이터가 불균형할 경우 단일 지표가 배포시 모델의 성능을 추측하기가 어럽다. 예를 들어, 암을 진단하는 모델을 개발한다고 했을때, 모델이 암 환자를 정상으로 판단했을 때의 리스크는 매우 크다. 또한 보통 암 환자보다 정상인이 더 많기 때문에 클래스 분포도 균형적이지 않다. 만약 이 모델을 정확도로만 평가한다면 해당 모델이 암 환자를 잘 찾내는지, 아니면 모든 사람을 ..

    [살아 움직이는 머신러닝 파이프라인 설계] 6. 모델 학습

    TFX에서 학습할 모델 정의하기 TFX에서 텐서플로우로 직접 만든 모델이나 케라스 모델을 모델 파이프라인에서 학습시킬수 있다. 이때 케라스 모델의 입력 레이어는 name에 전처리된 특성의 이름이 들어가야 자동으로 해당하는 입력 레이어에 맞춰 들어간다. Trainer 컴포넌트에게 필요한 입력 머신러닝 파이프라인에서 모델 학습을 진행할 때 Trainer 컴포넌트를 추가한다. 이때 Trainer에 5개의 입력을 집어넣어 정의한다. 데이터 스키마 전처리된 데이터 전처리 그래프 학습 하이퍼 파라미터 학습 방식을 정의한 run_fn() 이 저장된 소스코드 파일 run_fn() run_fn()은 TFT의 preprocessing_fn()처럼 사용자가 직접 정의하는 함수다. run_fn()은 Trainer가 모델을 학..

    [살아 움직이는 머신러닝 파이프라인 설계] 5. 데이터 전처리

    TFX가 머신러닝 파이프라인을 위한 데이터 전처리 컴포넌트를 따로 만든 이유 데이터 전처리는 수집한 원시 데이터를 모델이 학습할 수 있도록 변환하는 작업을 말한다. 그렇기 때문에 텐서플로 또한 데이터 전처리를 위한 다양한 함수와 클래스를 제공한다. 그렇다면 왜 TFX는 굳이 Tensorflow Transform(TFT) 이라는 전처리 라이브러리를 따로 만들었을까? 그 이유는 데이터 전처리 자체가 아닌 전처리를 수행하는 환경에 있다. 먼저 TFT는 데이터가 데이터셋 전체 컨텍스트에서 전처리할 수 있다. 예를 들어 수치 데이터를 Min-Max Scailing을 통해 Normalizing하려 한다면 데이터셋의 최대값과 최소값을 계산해야 한다. TFT는 데이터셋 전체의 최대값과 최소값을 구해 데이터를 [0, 1..

    [살아 움직이는 머신러닝 파이프라인 설계] 4. 데이터 검증

    데이터 검증 데이터 검증 단계에서는 수집한 데이터에 이상이 없는지 확인한다. 데이터셋에 이상치가 있거나 이전 데이터셋과 데이터의 구조가 달라졌거나 통계치가 불일치하는지를 검사해 새로 수집한 데이터셋을 사용할지 말지를 결정한다. 데이터 검증의 필요성 컴퓨터 공학에서 유명한 말 중의 하나가 GIGO(Garbage In, Garbage Out)이라는 말이 있는데, 이 뜻은 입력이 나쁘면 결과값도 나쁘다는 의미다. 이는 머신러닝 프로젝트에서는 특히 강조된다. 수집한 데이터셋의 품질이 좋지 못하면 학습한 모델의 예측 결과를 정확도가 낮거나 심지어 학습이 되지 않을 수 있다. 그렇기 때문에 머신러닝 파이프라인을 통과할 데이터를 검증하는 일은 다른 과정들 중에서도 특히 조심해야 한다. 또한 지속적으로 데이터를 수집하..

    [살아 움직이는 머신러닝 파이프라인 설계] 3. 데이터 수집

    데이터 수집 데이터 수집이란 외부나 내부 파일에서 학습할 데이터를 모으는 단계다. 다양한 곳에서 데이터를 수집해 이를 데이터가 tf.train.Example로 표현된 TFRecord 파일 형식으로 변환한다. tf.train.Example은 한 데이터의 특성(feature)값이 저장된 배열 텐서를 말한다. 일종의 텐서이므로 텐서 플로우로 만들어진 모델이 학습하거나 예측할 수 있다. ExampleGen ExampleGen은 이 데이터 수집 단계를 책임지는 TFX 컴포넌트다. 데이터 수집부터 데이터셋 분할, 데이터셋 스패닝까지 처리할 수 있다. 데이터 수집 데이터는 꽤 다양한 곳에서 수집할 수 있다. 내부 파일을 직접 다운로드한 다음 이를 파이프라인으로 가져오는 방식부터 클라우드 스토리지나 데이터베이스에서 네..

    [살아 움직이는 머신러닝 파이프라인 설계] 2. TFX - 텐서플로 익스텐디드

    TensorFlow eXtended (TFX) 파이프라인을 직접 작성하면 가장 문제가 많이 발생하는 부분이 글루 코드다. 글루 코드란 파이프라인 각 단계를 연결하는 코드를 말한다. 머신러닝 프로젝트에서 데이터 수집부터 모델 배포까지 각 단계를 거쳐야 하는데, 어느 단계에서 코드를 수정한다면 이를 파이프라인에 적용할 때 정상적으로 작동되는지 확인해야 한다. 만약에 각 단계마다 의존성이 심하면 버그를 해결하기 위해 다른 단계도 손봐야 할 수 있다. 이러한 일이 계속 발생한다면 머신러닝 파이프라인은 유지보수되기 어렵다. 구글에서도 이러한 문제를 계속 겪어왔다. 그래서 이러한 일을 해결하기 위해 Tensorflow Extended를 만들었다. TFX로 파이프라인의 정의를 단순화하고 기본적으로 필요한 코드의 양을..

    [살아 움직이는 머신러닝 파이프라인 설계] 1. 머신러닝 파이프라인

    오늘부터 TFX 스터디에 참여하면서 '살아 움직이는 머신러닝 파이프라인 설계'의 내용을 글로 정리하게 되었습니다. 책의 내용을 정리할 때 코드 부분을 생략하니 참고 바랍니다. 머신러닝 파이프라인이란 머신러닝 파이프라인이란 '머신러닝 생애주기를 표준화 및 자동화하는 방법'이다. 소프트웨어 공학이 '고품질의 소프트웨어를 개발하고 유지보수하도록 생애주기를 체계화하고 자동화'하기 위해 존재하듯, 머신러닝 파이프라인도 머신러닝 프로젝트에서 발생할 수 있는 여러 기술부채를 줄이기 위해 머신러닝 생애주기를 체계화 및 자동화한 것이다. 머신러닝 파이프라인의 필요성 머신러닝 파이프라인을 도입하게 되면 위에서 언급했듯이 머신러닝 프로젝트에서 생길 수 있는 기술부채를 줄일 수 있다. 구체적으로 설명하면 다음과 같다. 기존 ..