2016245053 머신러닝 작업흐름 일반
##머신러닝 작업흐름 일반
머신러닝의 작업흐름은 일반적으로 아래 항목으로 나뉩니다.
- 기계 학습 문제의 틀을 짜는 단계
- 작업 모델 개발 단계
- 프로덕션에서 모델을 배포하고 유지하기 위한 단계
윤리 관련 참고 사항
‘얼굴 사진으로 누군가의 신뢰도를 평가하는 AI 구축’과 같이 윤리적으로 의심스러운 프로젝트를 제안받기도 합니다.
신뢰성이 누군가의 얼굴에 반영되는지는 명확하지 않고, 모든 종류의 윤리적인 문제에 연관될 수 있습니다. 이 작업에 대한 데이터 세트를 수집하는 것은 사진에 레이블을 붙이는 사람들의 편견과 편견을 기록하는 것과 같습니다.
이러한 모델은 실제 사람들의 삶에 부정적인 영향을 미치면서 인간의 판단의 가장 나쁜 면들을 세탁하고 작동시킬 것입니다.
기술은 결코 중립적일 수 없으며 만약 연구가 세상에 영향을 미친다면, 이 영향은 도덕적인 방향을 가져야 합니다. 기술적인 선택 또한 윤리적 선택이며 당신의 작품이 뒷받침하기를 바라는 가치에 대해 항상 숙고해야합니다.
위에 나열된 문제와 같은 머신 러닝 문제에 접근하고 해결하는 데 사용할 수 있는 보편적인 단계별 Blueprint에 대해 학습합니다.
머신러닝의 보편적인 작업흐름은 크게 세 부분으로 구성됩니다.
- 과제 정의: 문제 영역과 고객의 요구의 기초가 되는 비즈니스 논리를 이해합니다. 데이터 집합을 수집하고 데이터가 나타내는 바를 파악한 후 작업에서 성공을 측정하는 방법을 선택합니다.
- 모델 개발: 머신러닝 모델에서 데이터를 처리할 수 있도록 준비하고, 모델 평가 프로토콜과 간단한 기준선을 선택한 후, 오버핏이 가능한 일반화 성능을 갖춘 첫 번째 모델을 교육한 다음, 모델을 정규화하고 조정할 수 있습니다.
- 모델 구축: 이해 관계자에게 작업물을 전달하고, 웹 서버, 모바일 앱, 웹 페이지 또는 임베디드 디바이스로 모델을 전달하며, 야생에서의 모델 성능을 모니터링하고, 차세대 모델 구축에 필요한 데이터 수집을 시작합니다.
1 과업정의
모델이 어떻게 사용되고 고객의 비즈니스 프로세스에 어떻게 부합하는지,
어떤 종류의 데이터를 사용할 수 있거나 수집할 수 있는지,
비즈니스 문제에 매핑할 수 있는 기계 학습 과제는 무엇인지 등을 정의해야 합니다.
1.1 문제의 뼈대를 세우다
기계 학습 문제를 구체화하려면 일반적으로 이해관계자들과의 많은 상세한 논의가 필요합니다.
- 무엇을 입력 데이터로 삼을 것인지, 예측하려는 것이 무엇인지 정해야 합니다. 예를 들어 영화 리뷰와 정서 주석이 모두 있는 경우에만 영화 리뷰의 감정을 분류하는 방법을 배울 수 있습니다. 이와 같이, 이 단계에서 데이터 가용성은 보통 제한 요소입니다. 대부분의 경우 사용자가 직접 새 데이터셋을 수집하고 주석을 달아야 합니다.
- 이항 분류, 다중 클래스 분류, 스칼라 회귀, 벡터 회귀, 멀티클래스, 멀티라벨 분류, 이미지 분할, 순위, 클러스터링, 생성 또는 강화 학습과 같은 입력 데이터에 걸맞는 머신러닝 방법을 알아내야 합니다.
어떤 경우에는 머신러닝이 데이터를 이해하는 가장 좋은 방법이 아닐 수도 있으며 평범한 구식 통계 분석과 같은 다른 것을 사용해야 하는 경우도 있습니다.
- 사진검색 엔진 프로젝트는 멀티클래스, 멀티라벨 분류 작업입니다.
- 스팸탐지 사업은 이항분류 업무입니다. “공격적인 내용”을 별도의 클래스로 설정하면 3원 분류 작업이 됩니다.
- 음악 추천 엔진은 딥 러닝이 아닌 매트릭스 인수분해(협업 필터링)를 통해 더 잘 처리되는 것으로 나타납니다.
- 신용카드 부정행위 적발사업은 이원분류 업무입니다.
- click-through-rate 예측 프로젝트는 스칼라 회귀 과제입니다.
- 이상 쿠키 탐지는 이진 분류 작업이지만, 원시 이미지에서 쿠키를 올바르게 추출하기 위해서는 1단계로 객체 탐지 모델이 필요합니다. “이상 검출”이라고 알려진 기계 학습 기법 세트는 이 설정에 적합하지 않습니다! 위성사진에서 새로운 고고학 유적지를 찾는 프로젝트는 이미지 유사성 순위 매기기 과제입니다.
- 기존 솔루션은 어떤 모습입니까? 아마도 당신의 고객은 이미 스팸 필터링이나 신용 카드 사기 탐지를 처리하는 수작업 알고리즘을 가지고 있을 것입니다. 현재 사람이 쿠키 공장에서 컨베이어 벨트를 모니터링하고 불량 쿠키를 수동으로 제거하거나 특정 아티스트를 좋아하는 사용자에게 보낼 노래 추천 재생 목록을 만드는 등의 과정을 수동으로 담당하고 있을 것이다. 어떤 시스템이 이미 구축되어 있는지, 어떻게 작동하는지 확실히 이해해야 합니다.
- 대처해야 할 특별한 제약 사항이 있습니까? 예를 들어, 스팸 탐지 시스템을 구축하는 앱이 철저하게 종단 간 암호화되어 있으므로 스팸 탐지 모델은 최종 사용자의 전화기에서 작동해야 하며 외부 데이터 세트에 대해 교육을 받아야 합니다. 아마도 쿠키 필터링 모델은 원격 서버보다는 공장에서 임베디드 장치에서 실행되어야 하는 지연 시간 제약이 있을 것이다. 당신은 당신의 작품이 들어맞을 전체 맥락을 이해해야 합니다.
조사를 마쳤으면, 여러분은 여러분의 입력이 무엇일지, 여러분의 목표가 무엇인지, 그리고 문제가 어떤 종류의 기계 학습 과제로 매핑되는지 알아야 합니다. 이 단계에서 여러분이 하는 가설에 유의하십시오.
-
입력이 주어졌을 때 목표값을 예측할 수 있다는 가설을 세웁니다.
-
사용 가능한 데이터(또는 곧 수집될 데이터)가 입력과 목표 간의 관계를 학습하는 데 충분한 정보를 제공한다는 가설을 세웁니다.
작업 모형을 갖추기 전까지는 가설일 뿐이며 검증되거나 무효화되기를 기다리고 있습니다. 기계 학습으로 모든 문제를 해결할 수 있는 것은 아닙니다; 입력 X와 대상 Y의 예를 종합했다고 해서 X가 Y를 예측하기에 충분한 정보를 포함하고 있다는 것을 의미하지는 않습니다. 예를 들어, 최근 가격 이력을 감안할 때 주식 시장의 주식 움직임을 예측하려고 한다면, 가격 이력은 예측 정보를 많이 포함하고 있지 않기 때문에 성공할 가능성이 낮습니다.
1.2 데이터 집합 수집
대부분의 머신러닝 프로젝트에서 가장 힘들고 시간이 많이 걸리며 비용이 많이 드는 부분인 데이터 수집이 필요한 시점입니다.
- 사진 검색 엔진 프로젝트에서는 먼저 분류하려는 레이블 세트를 선택해야 합니다. 즉, 10,000개의 일반적인 이미지 범주에 따라 결정됩니다. 그런 다음 이 세트의 레이블로 사용자가 업로드한 과거 이미지 수십만 개에 수동으로 태그를 지정해야 합니다.
- 대화 앱 스팸 탐지 프로젝트의 경우 사용자 채팅은 종단 간 암호화되므로 해당 콘텐츠를 모델 교육에 사용할 수 없습니다.
- 음악 추천 엔진의 경우 사용자의 “좋아요”를 사용하면 됩니다. 새로운 데이터를 수집할 필요가 없습니다.
click-through-rate
예측 프로젝트도 마찬가지입니다: 과거 광고에 대한click-through-rate
기록이 많습니다. Cookie - Flagging
모델의 경우 컨베이어 벨트 위에 카메라를 설치하여 수만 개의 이미지를 수집한 후 누군가가 수동으로 레이블을 붙여야 합니다. 이 방법을 알고 있는 사람들은 현재 쿠키 공장에서 일하고 있습니다. 하지만 그다지 어려워 보이지는 않습니다. 여러분은 이 방법을 사용하도록 사람들을 훈련시킬 수 있어야 합니다.- 위성 이미지 프로젝트에서는 고고학 팀이 기존 관심 사이트의 데이터베이스를 수집해야 하며, 각 사이트에 대해 다양한 기상 조건에서 촬영한 기존 위성 이미지를 찾아야 합니다. 좋은 모델을 얻으려면 수천 개의 다른 사이트가 필요할 것입니다.
모델의 일반화 기능은 거의 전적으로 학습된 데이터의 속성(데이터 포인트 수, 레이블의 안정성, 특성 품질
)에서 비롯된됩니다. 증분 모델링 개선 사항을 검색하는 것보다 더 많은 데이터를 수집하는 것이 가장 효과적인 방법입니다.
지도 학습을 수행하는 경우 입력(이미지
)을 수집한 후에는 입력(이미지 태그
)에 대한 주석(모델이 예측할 목표
)이 필요합니다.
때로는 음악 추천 작업이나 클릭률 예측 작업의 경우처럼 주석이 자동으로 검색될 수 있습니다. 하지만 종종 데이터에 주석을 직접 달아야 합니다. 이는 매우 많은 노력이 드는 과정입니다.
데이터 주석 인프라에 투자
데이터 주석 공정에 따라 목표물의 품질이 결정되고, 이는 다시 모델의 품질을 결정합니다.
- 데이터에 직접 주석을 달아야 할지,
Mechanical Turk
와 같은 크라우드소싱 플랫폼을 사용하여 레이블을 수집해야 할지,- 전문 데이터 레이블링 회사의 서비스를 사용해야 할지 등등을 결정해야합니다.
아웃소싱은 잠재적으로 시간과 비용을 절약할 수 있지만 통제력을 빼앗습니다. Mechanical Turk
와 같은 것을 사용하는 것은 비싸지 않고 잘 확장될 수 있지만, 여러분의 주석들은 꽤 시끄럽게 끝날지도 모릅니다.
최상의 옵션을 선택하려면 작업 중인 제약 조건을 고려해야합니다.
- 데이터 라벨 작성자가 주제 전문가여야 하는가, 아니면 데이터에 주석을 달 수 있는 능력을 갖추고 있는지 혹은 갖춘 사람이 있는지 알아야 합니다
cat-versus-dog
이미지 분류 문제의 라벨은 누구나 선택할 수 있지만 개 품종 분류 작업의 라벨은 전문 지식이 필요합니다. 한편, 뼈 골절의 CT 스캔에 주석을 다는 것은 의학 학위를 필요로 합니다. - 데이터에 주석을 달아야 하는 경우, 이를 위해 사람들을 교육할 수 있을지, 그렇지 않다면 관련 전문가와 접촉할 방법을 모색해야합니다.
- 전문가가 주석을 작성하는 방법을 스스로 이해하고 있지 못한다면 데이터 세트를 블랙박스로 취급해야 하며 수동 특성 엔지니어링을 수행할 수 없습니다. 이는 중요하지는 않지만 제한적일 수 있습니다.
데이터에 레이블을 붙이기로 결정한 경우 주석을 기록하는 데 사용할 소프트웨어를 스스로에게 물어보십시오. 당신이 직접 그 소프트웨어를 개발해야 할 수도 있습니다. 생산적인 데이터 주석 소프트웨어는 많은 시간을 절약할 수 있으므로 프로젝트 초기에 투자할 가치가 있습니다.
비대표 데이터 주의
머신러닝 모델은 이전에 본 것과 비슷한 입력만 이해할 수 있습니다. 따라서 교육에 사용되는 데이터가 생산 데이터를 대표해야 합니다. 이 문제는 모든 데이터 수집의 기반이 작동해야 합니다.
가능하면 모델이 사용될 환경에서 직접 데이터를 수집합니다.
- 영화 감상 분류 모델은 옐프 레스토랑 리뷰나 트위터 상태 업데이트가 아닌 새로운 IMDB 리뷰에 사용되어야 합니다.
- 트윗의 감성을 평가하려면 프로덕션에서 예상하는 사용자 집합과 유사한 사용자로부터 실제 트윗을 수집하고 주석을 다는 것부터 시작해야합니다.
- 프로덕션 데이터에 대한 교육이 가능하지 않다면 교육 데이터와 프로덕션 데이터가 어떻게 다른지 완전히 이해하고 이러한 차이를 적극적으로 수정해야 합니다.
당신이 알아야 할 관련 현상은 개념 드리프트입니다. 거의 모든 실제 문제, 특히 사용자 생성 데이터를 다루는 문제에서 개념 드리프트가 발생합니다. 개념 드리프트는 시간이 지남에 따라 생산 데이터의 속성이 변경되어 모델 정확도가 점차 저하될 때 발생합니다. 2013년에 훈련받은 음악 추천 엔진은 오늘날 그다지 효과적이지 않을 수 있다. 마찬가지로, 함께 작업한 IMDB 데이터 집합도 2011년에 수집되었으며, 이 데이터 집합으로 훈련된 모델은 시간이 지남에 따라 어휘, 표현 및 영화 장르가 발전함에 따라 2012년의 리뷰와 비교하여 2020년의 리뷰에서 제대로 수행되지 못할 가능성이 높습니다. 개념 표류는 신용 카드 사기 탐지와 같은 적대적 맥락에서 특히 극심하며, 사기 패턴은 실질적으로 매일 변합니다. 빠른 개념 드리프트를 처리하려면 지속적인 데이터 수집, 주석 및 모델 재교육이 필요합니다..
기계 학습은 훈련 데이터에 존재하는 패턴을 암기하는 데만 사용될 수 있다는 것을 명심해야합니다. 미래를 예측하기 위해 과거 데이터에 대해 훈련된 머신러닝을 사용하는 것은 미래가 과거와 같이 행동할 것이라는 가정을 하는 것이기 때문에 실적용 시 예측과 다른 결과가 나올 수 있습니다.
참고: 샘플링 편향의 문제
비대표 데이터의 특히 교활하고 흔한 경우는 샘플링 편향
입니다. 표본 추출 치우침은 데이터 수집 공정이 예측하려는 것과 교호작용할 때 발생하며, 이로 인해 측정값의 편향이 발생합니다.
1.3 데이터 이해
모델을 교육하기 전에 데이터를 탐색하고 시각화하여 예측 가능한 요소에 대한 통찰력을 얻고(특성 엔지니어링에 정보를 제공) 잠재적인 문제를 선별해야 합니다.
- 데이터에 이미지 또는 자연어 텍스트가 포함되어 있는 경우 몇 가지 샘플(및 해당 레이블)을 직접 살펴봐야합니다.
- 데이터에 수치 형상이 포함되어 있는 경우 형상 값의 히스토그램을 그래프로 표시하여 사용된 값의 범위와 다양한 값의 빈도를 파악하는 것이 좋습니다.
- 데이터에 위치 정보가 포함된 경우 지도에 표시합니다. 뚜렷한 패턴이 있는지 확인해야합니다.
- 일부 샘플의 일부 특성에 대한 결측값이 있다면 데이터를 준비할 때 이 문제를 해결해야 합니다.
- 작업이 분류 문제인 경우 데이터에 있는 각 클래스의 인스턴스 수를 인쇄합니다. 클래스가 대략적으로 동등하게 표현되지 않다면 이 불균형을 고려해야 합니다.
- 목표 누출 여부: 데이터에 실운영 환경에서 사용할 수 없는 대상에 대한 정보를 제공하는 기능이 있는지 확인합니다. 미래의 암 치료 여부를 예측하기 위해 의료기록에 대한 모델을 교육하고 있는데, 기록에 “이 사람이 암 진단을 받았다”는 특징이 포함되어 있다면, 여러분의 목표물이 인위적으로 여러분의 데이터에 유출되고 있는 것입니다. 데이터의 모든 기능이 운영 환경에서도 동일한 형태로 제공되는지 항상 자문해야합니다.
1.4성공을 선택합니다.
프로젝트를 성공을 달성하기 위해서, 당신이 먼저 정의해야되는게 성공-정확도인지, 정밀 조준과 회고인지, 고객-점유율인지, 성공을 위한 당신의 매트릭은 프로젝트 전체에 걸쳐 만들 기술적 선택을 안내할 것 입니다.
모든 클래스가 동등하게 가능한 균형 분류 문제의 경우 수신기 작동 특성 곡선(ROC AUC)의 정확도 및 면적은 일반적인 메트릭입니다. class-imbalanced
문제, 순위 문제나 멀티라벨 분류를 위해 정밀도 및 호출뿐만 아니라 가중 형태의 정확도 또는 ROC AUC를 사용할 수 있습니다.그리고 측은 성공을 측정할 사용자 지정 기준을 정의할 것은 드문 일이 아닙니다. 기계의 다양성 감각-그리고 그들이 어떻게 다른 문제 영역과 관련되어 있는지 성공 지표를 배우고 하려면 Kaggle (kaggle.com);
에 문제와 평가 지표의 광범위한 showcase은 데이터 과학 대회를 찾아보는 것이 도움이 됩니다.
2 모델 개발
진행 상황을 어떻게 측정할 것인지 알고 나면 모델 개발을 시작할 수 있습니다. 대부분의 튜토리얼 및 연구 프로젝트는 이 단계가 유일한 단계라고 가정합니다. 즉, 이미 수행된 것으로 간주되는 문제 정의 및 데이터 집합은 건너뛰고, 다른 사용자가 처리하는 것으로 간주되는 모델 배치 및 유지보수는 건너뜁니다. 사실 모형 개발은 기계학습 워크플로우에서 한 단계일 뿐입니다.
2.1 데이터 준비
딥러닝 모델은 일반적으로 옛날 데이터를 수집하지 않습니다. 데이터 전처리는 보다 최근의 옛날 데이터를 신경망에 더 잘 적응하도록 만드는 것을 목표로 합니다. 여기에는 벡터화, 정규화 또는 결측값 처리가 포함됩니다. 많은 전처리 기술은 도메인마다 다릅니다(예: 텍스트 데이터 또는 이미지 데이터).
모든 데이터 도메인에 공통적으로 적용되는 기본 사항에 대해 살펴보겠습니다.
벡터화
신경망의 모든 입력과 대상은 일반적으로 부동소수점 데이터의 텐서(또는 특정한 경우 정수나 문자열의 텐서)여야 합니다. 소리, 이미지, 텍스트 등 필요한 데이터가 무엇이든 먼저 텐서로 변환해야 합니다. 이 단계를 데이터 벡터화라고 합니다.
가치 표준화
MNIST 숫자 분류 예제에서는 0-255 범위의 정수로 인코딩된 영상 데이터에서 시작하여 그레이스케일 값을 인코딩했습니다. 이 데이터를 네트워크에 입력하기 전에 부동소수점 값이 0-1 범위에 오르게 하려면 부동소수점 값을 float32로 캐스팅하고 255로 나누어야 합니다. 마찬가지로 주택 가격을 예측할 때 부동소수점 값이 작고 정수 값이 상당히 큰 등 다양한 범위의 특성에서 시작했습니다. 이 데이터를 네트워크에 입력하기 전에 표준 편차가 1 이고 평균이 0 이 되도록 각 피쳐를 독립적으로 정규화해야 했습니다.
일반적으로 상대적으로 큰 값(예: 네트워크의 초기 가중치보다 훨씬 큰 여러 자리 정수)을 사용하는 신경망 데이터나 이기종 데이터(예: 하나의 기능이 o-i 범위에 있고 다른 기능이 100-200 범위에 있는 데이터)에 입력하는 것은 안전하지 않습니다. 이렇게 하면 대규모 그라데이션 업데이트가 트리거되어 네트워크가 수렴되지 않을 수 있습니다. 네트워크에서 보다 쉽게 학습하려면 데이터에 다음과 같은 특성이 있어야 합니다.
- 작은 값 사용 - 일반적으로 대부분의 값은 0-1 범위여야 합니다.
- 균일성- 즉, 모든 피쳐가 거의 동일한 범위의 값을 가져야 합니다.
결측값 처리
때때로 데이터에 결측값이 있을 수 있습니다. 예를 들어, 집값의 예에서 첫 번째 특성(데이터의 지수 o 열)은 1인당 범죄율이었다. 만약 이 기능이 모든 샘플에서 사용할 수 없다면 교육 또는 검정 데이터에 결측값이 있게 됩니다.
기능을 완전히 폐기할 수도 있지만 반드시 폐기할 필요는 없습니다.
- 특성이 범주형인 경우 “값이 누락됨”을 의미하는 새 범주를 만드는 것이 안전합니다. 모델은 대상에 대해 이것이 내포하는 의미를 자동으로 학습합니다.
- 특성이 숫자인 경우, 특성에 의해 형성된 잠재 공간에 불연속성이 발생하여 해당 특성에 대해 훈련된 모델이 일반화하기가 더 어려워질 수 있으므로 “o”와 같은 임의 값을 입력하면 안됩니다. 대신 결측값을 데이터 집합의 특성에 대한 평균값 또는 중위값으로 바꾸는 것을 생각해봐야합니다. 다른 형상의 값이 주어진 형상의 값을 예측하도록 모델을 교육할 수도 있습니다.
테스트 데이터에 범주형 결측 특성이 있을 것으로 예상되지만 네트워크가 결측값 없이 데이터에 대해 학습된 경우, 네트워크는 결측값을 무시하는 방법을 배우지 않습니다. 이 경우 누락된 항목이 있는 교육 샘플을 인위적으로 생성해야 합니다. 일부 교육 샘플을 여러 번 복사하고 테스트 데이터에서 누락될 것으로 예상되는 범주형 기능 중 일부를 삭제해야 합니다.
2.2 평가규약 선택
모델의 목적은 일반화를 달성하는 것이며, 모델 개발 프로세스 전반에 걸쳐 내릴 모든 모델링 결정은 일반화 성과를 측정하기 위한 검증 지표에 의해 안내됩니다. 검증 프로토콜의 목표는 실제 프로덕션 데이터에서 선택한 성공 지표(예: 정확도)를 정확하게 추정하는 것입니다. 그 과정의 신뢰성은 유용한 모델을 구축하는 데 매우 중요합니다.
세 가지 일반적인 평가 프로토콜이 있습니다.
- 홀드아웃 검증 세트 유지 - 데이터가 많을 때의 방법
- K-폴드 교차 검증 수행 - 샘플 수가 너무 적어서 홀드아웃 검증을 신뢰할 수 없을 때 올바른 선택
- 반복 K-폴드 검증 수행 - 데이터가 거의 없을 때 매우 정확한 모델 평가 수행
이것들 중 하나만 골라. 대부분의 경우 첫 번째 방법은 충분히 효과를 발휘합니다. 항상 검증 세트의 대표성에 유의하고 교육 세트와 검증 세트 사이에 중복 샘플이 없도록 주의해야합니다.
2.3 기준선 박치기
모형 자체에 대한 작업을 시작하면 통계적 검정력을 달성하는 것이 초기 목표입니다. 즉, 간단한 기준선을 능가할 수 있는 작은 모형을 개발하는 것입니다.
이 단계에서 가장 중요한 세 가지 사항은 다음과 같습니다.
- 특성 엔지니어링 - 정보를 제공하지 않는 특성(특성 선택)을 걸러내고 문제에 대한 지식을 활용하여 유용한 새 특성을 개발할 수 있습니다.
- 올바른 아키텍처 선택 : 촘촘하게 연결된 네트워크, 컨브넷, 반복적인 신경 네트워크, 트랜스포머 등의 사용할 모델 아키텍처 유형을 선택해야합니다. 딥러닝이 과제를 위한 좋은 접근법인지, 아니면 다른 것을 사용해야 할지 알아내야합니다.
- 충분한 교육 구성 선택 - 어떤 손실 기능을 사용해야할지 정해야 합니다. 배치 크기와 학습률 또한 정해야 합니다.
참고: 올바른 손실 기능 선택
문제에 대한 성공을 측정하는 메트릭에 대해 직접 최적화하지 못하는 경우가 많습니다. 메트릭을 손실 함수로 바꾸는 쉬운 방법이 없을 때도 있습니다. 결국 손실 함수는 데이터의 작은 배치(이상적으로 손실 함수는 단일 데이터 포인트만큼만 계산 가능해야 함)가 주어져야 하며, 역전파를 사용하여 네트워크를 훈련시킬 수 없어야 합니다. 따라서 분류 작업에서 교차 엔트로피와 같은 ROC AUC의 프록시 메트릭에 최적화하는 것이 일반적입니다. 일반적으로 교차 엔트로피가 낮을수록 ROC AUC가 더 높아지기를 바랄 수 있습니다.
표 6.1은 몇 가지 일반적인 문제 유형에 대한 마지막 계층 활성화 및 손실 함수를 선택하는 데 도움이 될 수 있습니다.
표 1. 모형에 적합한 마지막 계층 활성화 및 손실 함수 선택
Problem type | Last-layer activation | Loss function |
---|---|---|
Binary classification | sigmoid | binary_crossentropy |
Multiclass, single-label classification | softmax | categorical_crossentropy |
Multiclass, multilabel classification | sigmoid | binany_cnossentnopy |
Regression to arbitrary values | None | mse |
대부분의 문제에서 시작할 수 있는 기존 템플릿이 있습니다. 선행 기술을 조사하여 작업에서 가장 잘 수행할 수 있는 기능 엔지니어링 기술과 모델 아키텍처를 식별해야합니다.
통계적 힘을 얻는 것이 항상 가능한 것은 아닙니다. 합리적인 아키텍처를 여러 번 시도해도 단순한 기준선을 넘을 수 없다면 입력 데이터에 질문에 대한 답이 없는 것일 수 있습니다. 두 가지 가설을 세우고 있다는 것을 기억해야합니다.
- 입력값이 주어지면 출력을 예측할 수 있다는 가설을 세웁니다.
- 사용 가능한 데이터가 입력과 출력 간의 관계를 학습하는 데 충분한 정보를 제공한다는 가설을 세웁니다.
이 가설들이 거짓일 가능성이 높으며, 이 경우 당신은 처음부터 다시 시작해야합니다.
2.4 스케일업: 과대적합 모델 개발
일단 통계적 힘을 가진 모델을 얻으면 해당 모델이 당면한 문제를 적절하게 모델링하기에 충분한 레이어와 파라미터를 가지고 있는지 알아야 합니다. 예를 들어, 로지스틱 회귀 분석 모형은 MNIST에 대한 통계적 검정력이 있지만 문제를 잘 해결하기에는 충분하지 않습니다. 머신러닝의 보편적인 장력은 최적화와 일반화 사이입니다. 이상적인 모델은 과소적합과 과적합, 과소용량과 과용량 사이의 경계에 서 있는 모델입니다. 이 경계가 어디에 있는지 알아내려면 먼저 경계를 넘어야 합니다.
얼마나 큰 모델이 필요한지 알아내려면, 당신은 과대적합 모델을 개발해야 합니다. 5장에서 학습한 바와 같이 이 작업은 매우 쉽습니다.
- 레이어를 추가합니다.
- 겹을 크게 만듭니다.
- 더 많은 반복 epochs를 위한 훈련.
교육 손실 및 검증 손실은 물론 관심 있는 메트릭에 대한 교육 및 검증 값도 항상 모니터링합니다. 검증 데이터에 대한 모형의 성능이 저하되기 시작하면 과적합이 이루어진 것입니다.
2.5 모델 정규화 및 조정
일단 통계적 힘을 얻고 과대적합을 할 수 있게 되면 일반화 성능을 최대화하는 것이 목표입니다.
이 단계에서는 모델이 최대한 좋은 결과를 얻을 때까지 반복적으로 모델을 수정하고 교육하고 검증 데이터(현 시점에서 테스트 데이터가 아님)를 평가한 다음 다시 수정하고 반복합니다. 다음과 같은 몇 가지 방법을 시도하는 것이 좋습니다.
- 다양한 아키텍처를 시도하고 레이어를 추가 또는 제거합니다.
- dropout을 추가합니다.
- 모델이 작은 경우 L1 또는 L2 정규화를 추가합니다.
- 최적 구성을 찾기 위해 다양한 하이퍼 파라미터(예: 계층당 단위 수 또는 최적화 프로그램의 학습 속도)를 사용합니다.
- 선택적으로 데이터 큐레이션 또는 특성 엔지니어링을 반복할 수 있습니다. 더 많은 데이터를 수집하고 주석을 달거나, 더 나은 특성을 개발하거나, 유용한 것으로 보이지 않는 특성을 제거할 수 있습니다.
KerasTuner와 같은 자동화된 하이퍼 파라미터 튜닝 소프트웨어를 사용하여 이 작업의 상당 부분을 자동화할 수 있습니다.
검증 프로세스의 피드백을 사용하여 모델을 조정할 때마다 검증 프로세스에 대한 정보가 모형에 유출됩니다. 몇 번만 반복해도 무해하지만, 여러 반복에 걸쳐 체계적으로 수행되면 검증 데이터에 대해 직접 교육을 받은 모델이 없음에도 불구하고 결국 모델이 검증 프로세스에 과대적합하게 됩니다. 이것은 평가 과정의 신뢰성을 떨어뜨립니다.
만족스러운 모델 구성을 개발했으면 사용 가능한 모든 데이터(교육 및 검증)에 대해 최종 생산 모델을 교육하고 테스트 세트에서 마지막으로 평가할 수 있습니다. 테스트 세트의 성능이 검증 데이터에서 측정된 성능보다 훨씬 더 나쁜 것으로 판명되면 이는 검증 절차를 신뢰할 수 없거나 모형의 매개 변수를 조정하는 동안 검증 데이터에 과적합하기 시작했음을 의미할 수 있습니다. 이 경우 K-폴드 반복 유효성 검사와 같은 보다 안정적인 평가 프로토콜로 전환할 수 있습니다.
3 모델 배포
모델은 테스트 세트에 대한 최종 평가를 성공적으로 마쳤습니다. 테스트 세트를 배포하고 생산적인 수명을 시작할 준비가 되었습니다.
3.1 이해관계자에게 업무를 설명하고 기대치를 설정
성공과 고객 신뢰는 지속적으로 고객의 기대에 부응하거나 그 이상을 달성하는 것입니다. 실제로 제공하는 시스템은 그 그림의 절반에 불과합니다. 나머지 절반은 출시 전 적절한 기대치를 설정하고 있습니다.
AI 시스템에 대한 비전문가들의 기대는 종종 비현실적입니다. 예를 들어, 그들은 시스템이 과제를 “이해”하고 과제 맥락에서 인간과 같은 상식을 행사할 수 있다고 기대할 수 있습니다. 이 문제를 해결하려면 모형의 고장 모드의 몇 가지 예제를 보여 주는 것을 고려해야 합니다(예: 잘못 분류된 표본, 특히 잘못 분류된 표본이 놀라울 수 있는 표본 등).
또한 특히 이전에 사람이 처리했던 프로세스의 경우 인간 수준의 성능을 기대할 수 있습니다. 대부분의 머신러닝 모델은 인간이 생성한 라벨에 근접하도록 (불완전하게) 훈련되었기 때문에 거의 도달하지 못합니다. 모델 성능 기대치를 명확히 전달해야 합니다. “모델은 98%의 정확도를 가지고 있다”(대부분의 사람들이 정신적으로 최대 100%까지 반올림한다)와 같은 추상적인 문장을 사용하는 것을 피해야 합니다.
“이러한 설정을 사용하면 부정 행위 탐지 모델은 5%의 거짓 음성 비율과 2.5%의 거짓 양성률을 갖습니다. 매일 평균 200건의 유효거래가 사기행위로 플래그가 지정돼 수작업 검토를 위해 발송되고, 평균 14건의 사기거래가 누락됐다. 평균 266건의 부정거래가 적발될 것이다.”
모델의 성능 측정 기준을 비즈니스 목표와 명확하게 연관시킵니다.
또한 주요 시작 매개 변수(예: 트랜잭션에 플래그를 지정해야 하는 확률 임계값(임계값이 다르면 거짓 음수 및 거짓 긍정 비율이 다름)를 선택할 것인지 이해 관계자와 논의해야 합니다. 이러한 결정에는 비즈니스 맥락을 깊이 이해해야만 처리할 수 있는 트레이드오프가 포함됩니다.
3.2 추론 모델 발송
머신러닝 프로젝트는 훈련된 모델을 저장할 수 있는 콜랩 노트북에 도착해도 끝나지 않습니다. 교육 중에 조작한 것과 동일한 파이썬 모델 객체를 프로덕션으로 넣는 경우는 거의 없습니다.
첫번째로 Python이 아닌 다른 것으로 모델을 내보내는 것이 좋습니다.
- 프로덕션 환경이 Python을 전혀 지원하지 않을 수 있습니다. 예를 들어, Python이 모바일 앱이거나 임베디드 시스템인 경우입니다.
- 나머지 앱이 Python이 아닌 경우(JavaScript, C++ 등) 모델을 서비스하기 위해 Python을 사용하면 상당한 오버헤드가 발생할 수 있습니다.
둘째, 생산 모델은 교육용이 아니라 예측(추론이라고 하는 단계) 출력에만 사용되므로 모델을 더 빠르게 만들고 메모리 공간을 줄일 수 있는 다양한 최적화를 수행할 수 있습니다.
이제 사용 가능한 다양한 모델 구축 옵션을 간단히 살펴보겠습니다.
REST API로 모델 배포
이것은 아마도 모델을 제품으로 바꾸는 일반적인 방법입니다. 서버나 클라우드 인스턴스에 TensorFlow를 설치하고 REST API를 통해 모델의 예측을 쿼리합니다. 플라스크(또는 다른 파이썬 웹 개발 라이브러리)와 같은 것을 사용하여 자신만의 서빙 앱을 구축하거나 TensorFlow의 자체 라이브러리를 사용하여 모델을 API로 제공할 수 있습니다. TensorFlow 서빙(www.tensorflow.org/tfx/guide/servmgself)을 사용하여 Keras 모델을 몇 분 내에 배포할 수 있습니다.
다음과 같은 경우 이 배포 설정을 사용해야 합니다.
- 모델의 예측을 소비할 애플리케이션은 (분명히) 인터넷에 안정적으로 접근할 수 있습니다. 예를 들어 응용 프로그램이 모바일 응용 프로그램인 경우 원격 API에서 예측을 제공한다는 것은 응용 프로그램을 비행기 모드나 저연결 환경에서 사용할 수 없음을 의미합니다.
- 애플리케이션에는 엄격한 대기 시간 요구사항이 없습니다. 요청, 추론 및 응답 왕복에는 일반적으로 약 500ms가 소요됩니다.
- 추론을 위해 전송된 입력 데이터는 그다지 민감하지 않습니다. 즉, 모델은 데이터를 확인해야 하므로 해독된 형태로 서버에서 사용할 수 있어야 합니다(단, HTTP 요청 및 응답에는 SSL 암호화를 사용해야 함).
예를 들어 이미지 검색 엔진 프로젝트, 음악 추천 시스템, 신용카드 사기 탐지 프로젝트, 위성 이미지 프로젝트는 모두 REST API를 통해 서비스하기에 적합합니다.
REST API로 모델을 배포할 때 중요한 질문은 코드를 직접 호스팅할지 아니면 완전히 관리되는 타사 클라우드 서비스를 사용할지 여부입니다. 예를 들어 구글 제품인 클라우드 AI 플랫폼은 텐서플로우 모델을 구글 클라우드 스토리지(GCS)에 업로드하면 이를 쿼리할 수 있는 API 끝점을 제공한다. 일괄 처리 예측, 로드 밸런싱 및 확장과 같은 많은 실제적인 세부 사항을 처리합니다.
장치에 모델 배포
스마트폰, 로봇의 내장형 ARM CPU 또는 작은 장치의 마이크로컨트롤러 등 해당 애플리케이션을 실행하는 동일한 장치에 모델을 사용해야 하는 경우가 있습니다. 예를 들어, 여러분은 이미 카메라에서 직접 실행되는 작은 딥러닝 모델이었던, 여러분이 지목한 장면에서 사람과 얼굴을 자동으로 감지할 수 있는 카메라를 본 적이 있을 것입니다.
다음과 같은 경우 이 설정을 사용해야 합니다.
- 모델에 엄격한 지연 시간 제약이 있거나 연결성이 낮은 환경에서 실행해야 합니다. 몰입감 높은 증강현실 애플리케이션을 구축하고자 하는 경우 원격 서버를 쿼리하는 것은 실행 가능한 옵션이 아닙니다.
- 모델은 대상 장치의 메모리 및 전력 제약 조건에서 실행될 수 있을 정도로 충분히 작게 만들 수 있습니다(
TensorFlow Model Optimization Toolkit
사용 가능).: [1Q]를 참조하십시오. - 런타임 효율성과 정확도 사이에는 항상 균형이 있기 때문에 메모리 및 전력 제약으로 인해 대형 GPU에서 실행할 수 있는 최상의 모델보다 좋지 않은 모델을 제공해야 하는 경우가 많습니다.
- 입력 데이터는 엄격하게 중요하므로 원격 서버에서 해독할 수 없습니다.
예를 들어, 스팸 탐지 모델은 최종 사용자의 스마트폰에서 채팅 앱의 일부로 실행되어야 하는데, 이는 메시지가 종단 간 암호화되어 원격으로 호스팅된 모델에서 전혀 읽을 수 없기 때문이다. 마찬가지로 불량 쿠키 탐지 모델도 엄격한 대기 시간 제약이 있어 공장에서 실행해야 합니다. 다행히 이 경우 전력이나 공간 제약이 없어 GPU에서 실제로 모델을 실행할 수 있습니다.
스마트폰 또는 임베디드 장치에 Keras 모델을 배포하려면 TensorFlow Lite
(www.tensorflow.org/lite.)를 사용해야 합니다. ARM64 기반 컴퓨터, 라즈베리 파이 또는 특정 마이크로컨트롤러뿐만 아니라 Android 및 iOS 스마트폰에서 실행되는 효율적인 장치 딥러닝 추론을 위한 프레임워크입니다. Keras 모델을 TensorFlow Lite
형식으로 바로 전환할 수 있는 변환기가 포함되어 있습니다.
브라우저에서 모델 배포
딥 러닝은 브라우저 기반 또는 데스크톱 기반 자바스크립트 응용 프로그램에서 자주 사용됩니다. 응용 프로그램이 REST API를 통해 원격 모델을 쿼리하는 것이 보통 가능하지만 대신 사용자의 컴퓨터에서 직접 모델을 실행할 수 있는 주요 이점이 있을 수 있습니다.
다음 경우에 이 설정을 사용합니다.
- 컴퓨터를 최종 사용자에게 오프로드하여 서버 비용을 크게 절감할 수 있습니다.
- 입력 데이터는 사용자의 컴퓨터 또는 전화기에 계속 남아 있어야 합니다. 예를 들어 스팸 탐지 프로젝트에서 채팅 앱의 웹 버전과 데스크톱 버전(JavaScript로 작성된 크로스 플랫폼 앱으로 구현됨)은 로컬에서 실행되는 모델을 사용해야 합니다.
- 애플리케이션에는 엄격한 지연 시간 제약이 있습니다. 최종 사용자의 노트북이나 스마트폰에서 실행되는 모델은 서버의 대형 GPU에서 실행되는 모델보다 속도가 느릴 수 있지만, 네트워크 왕복이라는 추가적인 제약은 없습니다.
- 모델을 다운로드하고 캐슁한 후에도 연결 없이 계속 작동하려면 앱이 필요합니다.
물론 모델이 사용자의 노트북이나 스마트폰의 CPU, GPU 또는 RAM을 독점하지 않을 정도로 작은 경우에만 이 옵션을 사용해야 합니다. 또한 전체 모델이 사용자의 장치에 다운로드되므로 모델에 대해 비밀로 유지할 필요가 없도록 해야 합니다. 훈련된 딥러닝 모델이 주어지면 일반적으로 훈련 데이터에 대한 일부 정보를 복구할 수 있다는 사실에 유의하십시오. 중요한 데이터에 대해 훈련된 모델은 공개하지 않는 것이 좋습니다.
JavaScript에서 모델을 배포하기 위해 TensorFlow
생태계는 TensorFlow.js
(www.tensorflow.org/js)를 포함합니다. 딥러닝을 위한 자바스크립트 라이브러리로, 거의 모든 Keras API
(원래는 WebKeras라는 이름으로 개발됨)와 수많은 하위 레벨 텐서플로 API를 구현한다. 저장된 Keras 모델을 TensorFlow.js
로 쉽게 가져와 브라우저 기반 JavaScript 앱 또는 데스크톱 전자 앱의 일부로 쿼리할 수 있습니다.
추론 모형 최적화
사용 가능한 전력 및 메모리(스마트폰 및 임베디드 장치)에 엄격한 제약이 있는 환경이나 대기 시간이 짧은 애플리케이션에 배포할 때 추론을 위해 모델을 최적화하는 것이 특히 중요합니다. TensorFlow.js
로 가져오거나 TensorFlow Lite
로 내보내기 전에 항상 모델을 최적화해야 합니다.
적용할 수 있는 두 가지 일반적인 최적화 기법이 있습니다.
- 가중치 가지치기: 가중치 텐서의 모든 계수가 예측에 동일하게 기여하는 것은 아니다. 가장 중요한 항목만 유지하면 모델의 계층에서 매개변수 수를 크게 줄일 수 있습니다. 따라서 성능 메트릭에서 적은 비용으로 모델의 메모리 및 컴퓨팅 설치 공간을 줄일 수 있습니다. 적용할 가지치기 양을 조정하면 크기와 정확도 사이의 균형을 조정할 수 있습니다.
- 체중 정량화: 딥 러닝 모델은 단일 정밀 부동 소수점(
float32
) 가중치를 사용하여 훈련된다. 그러나 가중치를 8비트 부호 정수(int8
)로 정량화하면 4배 작지만 원래 모델의 정확도에 가까운 추론 전용 모델을 얻을 수 있다.`
TensorFlow
생태계는 Keras API와 긴밀하게 통합된 가중치 정리 및 정량화 툴킷(www.tensorflow.org/model_optimization)을 포함한다.
3.3 야생에서 모델 모니터링
추론 모델을 내보내고 이를 애플리케이션에 통합한 후 프로덕션 데이터에 대해 모의 실행을 수행했습니다. 이 모델은 예상대로 작동합니다. 유닛 테스트뿐만 아니라 로깅 및 상태 모니터링 코드도 작성했습니다. 완벽합니다. 이제 큰 빨간색 버튼을 눌러 실운영에 투입할 차례입니다.
심지어 이것이 끝이 아닙니다. 모델을 구축한 후에는 모델의 동작, 새 데이터에 대한 성능, 나머지 애플리케이션과의 상호 작용 및 궁극적으로 비즈니스 메트릭에 미치는 영향을 계속 모니터링해야 합니다.
- 새로운 음악 추천 시스템을 구축한 후 온라인 라디오에 대한 사용자 참여의 증감, 새로운
click-through-rate
예측 모델로 전환한 후 평균 광고click-through-rate
의 증감이 있다면 랜덤 A/B 검정을 사용하여 모델 자체의 영향을 다른 변경으로부터 분리하는 것을 고려해봐야합니다. 사례의 일부는 새 모형을 통과해야 하고 다른 제어 부분 집합은 이전 공정을 고수해야 합니다. 충분히 많은 사례가 처리되면, 두 사례의 결과 차이는 모델에 기인할 가능성이 높다. - 가능하면 생산 데이터에 대한 모델의 예측에 대해 정기적인 수동 감사를 실시합니다. 일반적으로 데이터 주석과 동일한 인프라를 재사용할 수 있습니다. 생산 데이터의 일부를 수동으로 주석을 달도록 전송하고 모델의 예측값을 새 주석과 비교합니다. 예를 들어 이미지 검색 엔진과 잘못된 쿠키 플래그 지정 시스템에 대해 이 작업을 수행해야 합니다.
- 수동 감사가 불가능한 경우 사용자 설문 조사와 같은 대체 평가 방법(예: 스팸 및 유해 콘텐츠 플래그 지정 시스템의 경우)을 고려해야합니다.
3.4 모델 유지
마지막으로, 영원한 최신 모델은 없습니다. 시간이 지남에 따라 생산 데이터의 특성이 바뀌어 모델의 성능과 관련성이 점차 저하됩니다. 음악 추천 시스템의 수명이 몇 주 내로 계산됩니다. 신용카드 사기 탐지 시스템의 경우 며칠이 걸릴 수 있습니다. 이미지 검색 엔진을 위한 최고의 경우 2년입니다.
모델이 출시되자마자 모델을 대체할 다음 세대를 교육할 준비를 해야 합니다.
- 생산 데이터의 변화를 주의하세요. 새로운 기능을 사용할 수 있는지, 레이블 세트를 확장해야할지, 그렇지 않으면 편집해야 할지를 고민해야 합니다.
- 데이터를 계속 수집하고 주석을 달 수 있으며 시간이 지남에 따라 주석 파이프라인을 계속 개선할 수 있습니다. 특히 현재 모형에 대해 분류하기 어려운 표본을 수집하는 데 특히 주의해야 합니다. 이러한 표본은 성능을 향상시키는 데 도움이 될 가능성이 높습니다.
이것으로 머신러닝의 보편적인 워크플로우를 마칩니다. 이제 기계 학습 프로젝트에 수반되는 전체 스펙트럼이라는 큰 그림에 익숙해졌습니다. 이 책의 대부분은 모델 개발 부분에 초점을 맞추지만, 이제 전체 워크플로우의 일부분에 불과하다는 것을 알게 되었습니다.
4 챕터 요약
모델이 준비되고 테스트 데이터에 대해 우수한 성능을 제공하면 이제 다음과 같이 배포할 때입니다. 먼저 이해관계자들과 적절한 기대치를 설정하도록 합니다. 추론을 위해 최종 모델을 최적화하고 웹 서버, 모바일, 브라우저, 임베디드 디바이스 등의 배포 환경에 모델을 제공합니다. 모델의 생산 성능을 모니터링하고 데이터를 계속 수집하여 차세대 모델을 개발할 수 있습니다.
- 새로운 머신러닝 프로젝트를 수행할 때는 먼저 당면한 문제를 정의합니다.
- 최종 목표는 무엇이고 제약은 무엇인지를 통해 보다 광범위한 맥락을 이해합니다.
- 데이터 세트를 수집하고 주석을 달 수 있습니다. 데이터를 자세히 이해해야 합니다.
- 문제에 대한 성공을 측정하는 방법, 즉 검증 데이터에 대해 어떤 메트릭스를 모니터링할 것인지 선택합니다.
- 문제를 이해하고 적절한 데이터 세트를 확보했으면 모델을 개발합니다.
- 데이터를 준비합니다.
- 평가 프로토콜 선택: 홀드-아웃 검증을 쓸지, K-폴드 검증을 쓸지, 검증에 사용할 데이터 부분은 어느 정도일지 선택해야 합니다.
- 통계력 달성: 간단한 기준선을 능가합니다.
- 스케일업: 과대적합 할 수 있는 모델을 개발합니다.
- 검증 데이터의 성능에 따라 모델을 정규화하고 하이퍼 파라미터를 조정할 수 있습니다. 많은 기계 학습 연구는 이 단계에만 초점을 맞추고 큰 그림을 염두에 두는 경향이 있습니다.
- 모델이 준비되고 테스트 데이터에 대해 우수한 성능을 제공하면 이제 다음과 같이 배포할 때입니다.
- 먼저 이해관계자와 적절한 기대치를 설정하도록 합니다.
- 추론을 위해 최종 모델을 최적화하고 웹 서버, 모바일, 브라우저, 임베디드 디바이스 등의 배포 환경에 모델을 제공합니다.
- 모델의 생산 성능을 모니터링하고 데이터를 계속 수집하여 차세대 모델을 개발할 수 있습니다.
[10] www.tensorflow.org/model_optimization