학습 목표
- Describe multi-task learning and transfer learning
- Recognize bias, variance and data-mismatch by looking at the performances of your algorithm on train/dev/test sets
Carrying Out Error Analysis

에러 분석 (Error Analysis)의 개념:
인간이 수행하는 작업을 기계 학습 알고리즘으로 수행하려고 할 때, 알고리즘의 성능이 아직 인간 수준이 아닌 경우, 알고리즘이 범하는 오류를 수동으로 조사하여 다음 단계를 결정하는 프로세스입니다.
예시:
예를 들어, 고양이 분류기를 개발 중이고, 개발 세트에서 90% 정확도 (10% 오류)를 달성했지만 이것이 기대보다 낮다고 가정합니다.
알고리즘이 개를 고양이로 잘못 분류한다는 문제를 발견하면 이 문제를 해결하기 위한 프로젝트를 시작할 가치가 있는지 여부를 결정해야 합니다.
에러 분석 프로세스:
에러 분석을 수행하기 위해 먼저 약 100개의 잘못 분류된 개발 세트 예제를 수집하고, 수동으로 검토합니다.
그 중 실제로 개의 사진인지 확인하고 해당 비율을 계산합니다.
개발 세트에서 개의 비율이 낮다면, 개 문제를 해결해도 성능 향상이 제한될 수 있음을 의미합니다.
성능 한계 (Ceiling on Performance):
에러 분석은 작업을 진행할 가치가 있는지 판단하는 데 도움을 주며, 성능 향상 가능성의 상한을 제시합니다.
성능을 개선할 수 있는 한계를 제시하므로 어느 방향으로 진행할지 결정하는 데 도움이 됩니다.
다중 아이디어 평가:
에러 분석을 사용하여 여러 아이디어를 병행하여 평가할 수 있습니다.
예를 들어, 고양이 감지기 성능을 향상시키는 여러 아이디어를 병행하여 평가할 수 있으며, 각 아이디어에 대한 효과를 비교하고 우선순위를 결정할 수 있습니다.
Cleaning Up Incorrectly Labeled Data

데이터와 레이블 오류:
지도 학습 문제에서 데이터 (X)와 레이블 (Y)로 구성됩니다.
때로는 데이터의 일부 레이블 (Y)이 잘못되게 표시될 수 있습니다. 이러한 잘못된 레이블을 고치는 것이 가치가 있는지 여부를 고려해 봅니다.
데이터 레이블 관련 용어:
레이블이 잘못 지정된 경우를 "mislabeled examples"라고 부르고, 훈련 세트 또는 개발 세트 또는 테스트 세트에서 실제 레이블이 잘못된 경우를 "incorrectly labeled examples"로 지칭합니다.
훈련 세트에서의 오류 처리:
딥러닝 알고리즘은 훈련 세트에서의 임의의 오류에 상당히 강건합니다.
오류가 임의의 경우, 랜덤한 경우라면, 큰 문제가 없을 수 있으며, 오류를 수정하지 않아도 될 수 있습니다.
훈련 세트 이외의 오류 처리:
개발 세트 또는 테스트 세트에서 레이블 오류가 있는 경우, 에러 분석을 통해 이를 확인하고, 영향을 평가합니다.
잘못된 레이블이 전체 에러의 일부인지 확인하고, 이에 따라 수정 여부를 결정합니다.
오류 분석을 통한 결정:
수정해야 할 레이블이 전체 성능에 미치는 영향을 평가하기 위해 다음 세 가지를 고려합니다.
전체 개발 세트 에러율
레이블 오류로 인한 에러 비율
기타 원인으로 인한 에러 비율
레이블 오류가 상당한 영향을 미칠 때, 수정이 가치 있을 수 있습니다.
개발 및 테스트 세트 레이블 수정:
레이블 오류 수정 시 개발 및 테스트 세트에 동일한 프로세스를 적용하여 동일한 분포를 유지해야 합니다.
모델이 올바르게 예측한 데이터 또한 확인하여 왜 올바르게 분류되었는지 이해해야 합니다.
훈련 세트 레이블 수정:
훈련 세트의 레이블 수정은 훈련 알고리즘의 영향을 크게 받지 않으므로 선택 사항입니다.
훈련 세트와 개발/테스트 세트의 분포가 다른 경우, 레이블 수정에 덜 관심을 둘 수 있습니다.
결론:
레이블 오류 수정은 분석 및 우선 순위 결정에 도움이 되지만, 그 영향을 신중히 평가해야 합니다.
개발 세트와 테스트 세트가 모델 평가에 중요하므로 레이블 오류가 영향을 미치는 경우 수정이 필요합니다.
레이블 오류가 상당한 비율의 전체 에러를 차지할 때, 수정이 더욱 가치 있을 수 있습니다.
학습 알고리즘 개발에서도 인간의 통찰과 수동 에러 분석이 중요할 수 있으며, 데이터를 더 잘 이해하고 방향을 결정하는 데 도움이 됩니다.
Build your First System Quickly, then Iterate

빠른 첫 번째 시스템 구축:
새로운 애플리케이션을 개발할 때, 먼저 개발/테스트 세트와 측정 지표를 설정하고, 초기 머신 러닝 시스템을 빠르게 구축하는 것을 권장합니다.
가치분석과 에러 분석:
초기 시스템을 구축하면 편향/분산 분석 및 에러 분석을 통해 다음 단계를 우선순위에 따라 결정할 수 있습니다.
에러 분석을 통해 특정 오류가 발생하는 원인을 파악하고, 그에 따라 개선 방향을 결정할 수 있습니다.
머신 러닝 프로젝트 팁:
새로운 문제에 처음으로 접근할 때, 복잡한 시스템을 처음부터 구축하지 않고 빠른 프로토타입을 빠르게 만드는 것이 중요합니다.
빠른 첫 번째 시스템은 편향/분산 분석 및 에러 분석을 수행하고, 다음 단계를 계획하는 데 도움이 됩니다.
종합:
새로운 애플리케이션을 개발할 때, 첫 번째 시스템을 빠르게 구축하고 반복 개발하는 것이 중요합니다.
해당 분야에서 경험이 부족하거나 학계 문헌이 부족한 경우, 복잡한 시스템을 처음부터 구축하지 말고 먼저 간단한 시스템을 구축하고 개선 방향을 찾아가는 것이 유용합니다.
프로젝트 관리 팁:
과도한 복잡성은 피하고, 먼저 간단한 시스템으로 시작하여 성능을 개선해 나가는 것이 더 효과적일 수 있습니다.
프로젝트 목표가 "작동하는 것을 만드는 것"이라면 초기 빠른 첫 번째 시스템 구축이 중요합니다.
Training and Testing on Different Distributions

딥 러닝 알고리즘과 데이터:
딥 러닝 알고리즘은 풍부한 훈련 데이터를 필요로 합니다.
훈련 데이터를 얻기 위해 다른 분포에서 가져온 데이터를 사용하는 경우가 많습니다.
데이터 분포 차이:
훈련, 개발 및 테스트 데이터의 분포가 서로 다른 경우가 있습니다.
이러한 경우에는 어떻게 처리할지에 대한 고려가 필요합니다.
예시 1: 고양이 인식 앱:
사용자가 업로드한 사진을 통해 고양이를 인식하는 앱을 개발하는 상황을 고려합니다.
웹에서 다운로드한 이미지와 사용자가 업로드한 이미지의 분포가 다를 때, 어떻게 데이터를 활용할지에 대한 고려사항을 제시합니다.
예시 2: 음성 인식 뒷마르미어:
음성 인식 뒷마르미어를 위한 데이터 수집을 고려합니다.
다른 음성 인식 애플리케이션에서 얻은 데이터와 목표 애플리케이션의 데이터 분포가 다를 때, 훈련 데이터를 어떻게 활용할지에 대한 전략을 제시합니다.
데이터 분할 전략:
데이터를 훈련, 개발 및 테스트 세트로 나누는 방법에 대한 설명을 제공하며, 어느 데이터 분포에 주력할지 결정하는 중요성을 강조합니다.
훈련 데이터 활용:
훈련 데이터의 어떤 부분을 어떻게 활용할 것인지에 대한 옵션을 제시하며, 목표에 따라 데이터 사용 전략을 선택할 필요가 있다고 설명합니다.
데이터 양과 분포:
데이터 양과 분포를 고려하여 어떤 데이터를 훈련에 사용할지 결정하며, 올바른 데이터 사용 전략을 선택하면 학습 알고리즘의 성능을 향상시킬 수 있다는 점을 강조합니다.
Bias and Variance with Mismatched Data Distributions


일반화 잘 안됨을 확인 -training 과 training dev는 같은 분포의 데이터임

낮은 분산 오류. 데이터 불일치 문제

왼:회피가능 편향 문제 , 높은 편향 설정.
오:회피가능 편향 높음. 분산은 작음. 데이터 불일치는 꽤 큼.
----------------------------------------------------------------------------------------------
학습 알고리즘의 편향(bias)과 분산(variance)을 추정하는 것은 다음 단계에 어떤 작업을 우선으로 할 지 결정하는 데 도움이 됩니다.
학습 데이터 집합(training set)과 개발(dev) 및 테스트(test) 집합이 서로 다른 분포에서 비롯된 경우 편향과 분산을 분석하는 방법이 변경됩니다.
편향과 분산 분석을 수행할 때, 학습 오차와 개발 집합의 오차를 고려해야 합니다. 학습 오차가 낮고 개발 집합의 오차가 높다면 분산 문제가 있을 수 있습니다.
훈련-개발 집합(training-dev set)이라는 새로운 데이터 집합을 도입하여 데이터 분석을 수행할 때 유용합니다. 이 집합은 훈련 집합과 동일한 분포를 가지지만 모델이 명시적으로 훈련하지 않습니다.
훈련 오차, 훈련-개발 오차, 그리고 개발 집합의 오차를 비교하여 편향, 분산 및 데이터 불일치 문제를 이해할 수 있습니다.
인간 수준 오차, 훈련 집합 오차, 훈련-개발 집합 오차, 그리고 개발 집합 오차를 비교하여 모델의 성능을 평가하고 문제를 파악할 수 있습니다.
데이터 불일치 문제를 해결하는 것은 편향 및 분산 문제와 달리 체계적인 방법이 부족하지만 추가 데이터를 확보하여 학습 알고리즘의 성능을 향상시킬 수 있습니다.
데이터 불일치 문제를 해결하기 위한 몇 가지 시도 방법이 있지만 체계적인 방법은 아직 없습니다.
Addressing Data Mismatch

1. 수동 오류 분석 수행: 데이터 불일치 문제를 해결하려면 일반적으로 수동 오류 분석을 수행하고 훈련 세트와 개발/테스트 세트 간의 차이점을 이해하려고 노력합니다. 개발 세트만 검토하고 테스트 세트를 보지 않도록 해야 하지만 구체적인 예로 말하면 스피치 활성화 리어뷰 미러 응용 프로그램을 개발하는 경우 개발 세트의 예제를 듣거나 확인하여 개발 세트가 훈련 세트와 어떻게 다른지 파악할 수 있습니다. 예를 들어, 개발 세트의 많은 예제가 매우 노이즈가 심하고 자동차 소음이 많다는 것을 발견할 수 있습니다. 이것이 개발 세트가 훈련 세트와 다른 방식으로 다른 한 예입니다.
2. 데이터 유사성 높이기: 오류 분석을 통해 개발 세트와 훈련 세트 간의 차이를 이해한 후, 훈련 데이터를 개발/테스트 세트와 더 유사하게 만들 수 있는 방법을 찾아보거나, 대안으로 개발 및 테스트 세트와 유사한 데이터를 수집해 볼 수 있습니다. 예를 들어, 자동차 내부에서의 노이즈가 주요 오류 원인이라면 노이즈가 있는 자동차 내부 데이터를 합성할 수 있습니다.
3. 인공 데이터 합성: 데이터 불일치 문제를 해결하기 위한 기술 중 하나는 인공 데이터 합성입니다. 예를 들어, 자동차 내부에서의 노이즈를 합성할 수 있으며, 합성된 데이터를 훈련 세트에 추가하여 모델이 테스트 환경에서 더 잘 수행되도록 도울 수 있습니다. 그러나 인공 데이터 합성에는 주의가 필요합니다. 데이터 불일치 문제를 해결하려고 할 때 1시간의 자동차 내부 노이즈를 10,000시간으로 반복 사용하는 경우, 모델이 그 1시간의 노이즈에 과적합할 수 있으므로 유의해야 합니다. 가능하다면 더 많은 고유한 데이터를 사용하는 것이 좋습니다.
4. 인공 데이터 생성 주의: 인공 데이터 생성을 할 때에는 데이터의 다양성과 충분한 커버리지를 고려해야 합니다. 예를 들어, 자동차 검출 모델을 개발할 때 컴퓨터 그래픽스로 생성한 자동차 이미지를 사용한다면, 가능한 모든 자동차 모델을 충분히 다루는 데이터를 생성해야 합니다. 그렇지 않으면 모델이 학습한 자동차 종류에 대해서만 잘 동작할 것입니다.
Transfer Learning

딥 러닝에서 가장 강력한 아이디어 중 하나는 때로는 신경망이 하나의 작업에서 배운 지식을 다른 작업에 적용할 수 있다는 것입니다. 예를 들어, 신경망을 고양이와 같은 객체를 인식하도록 학습시킬 수 있고, 그 지식의 일부를 사용하여 X-레이 스캔을 더 잘 읽을 수 있도록 도울 수 있습니다. 이것을 전이 학습(Transfer Learning)이라고 합니다.
전이 학습은 다음과 같이 작동합니다. 먼저, 이미지 인식과 같은 작업에 대한 신경망을 훈련시킵니다. 그런 다음 이 신경망의 마지막 출력 레이어와 해당 레이어로 향하는 가중치를 제거하고, 새로운 무작위로 초기화된 가중치를 생성하여 이제 방사선 진단과 같은 다른 작업에 대한 출력으로 사용합니다. 이후, 전체 네트워크의 가중치를 재훈련하거나 마지막 레이어의 가중치만 재훈련할 수 있으며, 이 과정은 초기 훈련 단계와 추가 훈련 단계로 구분할 수 있습니다. 이를 사전 훈련(Pre-training)과 미세 조정(Fine-tuning)이라고 합니다.
전이 학습은 주로 다음과 같은 경우에 유용합니다:
작업 A에 대한 데이터가 많고, 작업 B에 대한 데이터가 상대적으로 적은 경우.
작업 A와 작업 B가 동일한 입력 데이터 X를 가질 때.
작업 A에서 학습한 저수준 피쳐가 작업 B의 학습에 도움이 될 것으로 의심될 때.
전이 학습은 작업 B에서 성능 향상을 도울 수 있으며, 주로 작업 B에 대한 데이터가 부족한 경우에 활용됩니다. 반대로 작업 A에 대한 데이터가 작업 B보다 적은 경우에는 큰 성능 향상을 기대하기 어려울 수 있습니다.
Multi-task Learning

전이 학습:
전이 학습은 한 작업(A)에서 학습한 지식을 다른 작업(B)에 적용하는 아이디어입니다.
이를 위해 A 작업에서 학습한 신경망을 가져와서 B 작업을 위해 미세 조정(fine-tuning)합니다.
전이 학습은 주로 A 작업에는 많은 데이터가 있고 B 작업에는 상대적으로 적은 데이터가 있는 경우에 유용합니다.
멀티태스크 학습:
멀티태스크 학습은 여러 작업을 동시에 수행하도록 신경망을 훈련시키는 개념입니다.
각 작업은 다른 작업에 도움을 줄 수 있으며, 예를 들어 자율 주행 자동차에서는 보행자, 다른 차량, 정지 신호 등 여러 작업을 동시에 수행할 수 있습니다.
각 작업에 대한 레이블을 예측하기 위해 신경망을 훈련시키고, 다중 레이블 분류 문제로 정의됩니다.
멀티태스크 학습의 장점:
멀티태스크 학습은 공유 저수준 특성(Shared Low-Level Features)을 활용할 수 있는 작업에 유용합니다.
작업 간 데이터 양이 비슷할 때 유용하며, 다른 작업들이 한 작업의 성능을 향상시킬 수 있습니다.
충분히 큰 신경망을 훈련시킬 수 있다면 멀티태스크 학습은 전체적인 성능 향상을 이끌어낼 수 있습니다.
멀티태스크 학습 적용 분야:
멀티태스크 학습은 전이 학습에 비해 덜 일반적으로 사용되지만, 컴퓨터 비전 분야에서 객체 감지(Object Detection)와 같은 작업에서 많이 활용됩니다.
결론:
멀티태스크 학습과 전이 학습은 딥 러닝에서 중요한 도구입니다.
멀티태스크 학습은 여러 작업을 동시에 수행하도록 신경망을 훈련시키는 방법으로, 데이터 양과 공유 특성에 주의해야 합니다.
What is End-to-end Deep Learning?

End-to-End Deep Learning:
End-to-End Deep Learning은 딥 러닝의 중요한 발전 중 하나입니다.
이는 여러 단계의 데이터 처리 또는 학습 시스템을 하나의 신경망으로 대체하는 개념입니다.
예를 들어 음성 인식에서, 기존 방법은 여러 처리 단계를 거치는 반면, End-to-End Deep Learning은 음성을 직접 텍스트로 변환할 수 있습니다.
사례: 음성 인식:
기존 방법에서는 음성을 특징 추출 및 모델링 과정을 거쳐 텍스트로 변환합니다.
End-to-End Deep Learning은 오디오 클립을 입력으로 받아 텍스트로 직접 변환할 수 있으며, 여러 중간 단계를 생략합니다.
사례: 얼굴 인식 턴스타일:
얼굴 인식 턴스타일에서는 얼굴을 인식하고 그 인물을 식별하는 시스템을 구축합니다.
이를 End-to-End Deep Learning으로 구현하지 않고, 얼굴 감지와 식별을 두 개의 단계로 나누어 처리합니다.
이 접근 방식은 데이터 양과 간단한 작업으로 나누어서 학습할 수 있기 때문에 성능이 더 좋습니다.
사례: 기계 번역:
기계 번역에서는 과거에는 복잡한 파이프라인 방식으로 번역을 수행했습니다.
End-to-End Deep Learning은 입력 문장을 출력 번역으로 직접 매핑할 수 있습니다.
충분한 X-Y 쌍 데이터가 있을 때 End-to-End Deep Learning이 잘 작동합니다.
사례: 어린이 나이 추정:
어린이의 손 X-선 사진을 사용하여 어린이의 나이를 추정하는 문제를 고려합니다.
이러한 문제는 두 개의 단계로 나누어 처리하면 더 나은 성능을 얻을 수 있습니다.
단계 하나는 어린이의 손에서 뼈를 분할하고 다음은 그 분할 된 뼈의 길이를 기반으로 나이를 추정합니다.
결론:
End-to-End Deep Learning은 데이터 처리 및 기계 학습 시스템을 단순화할 수 있는 강력한 방법 중 하나입니다.
그러나 항상 최적의 접근 방식은 아니며, 데이터 양과 작업 유형에 따라 최적의 방법을 선택해야 합니다.
데이터 양이 충분하고 작업이 단순할 때 End-to-End Deep Learning이 잘 작동합니다. 그렇지 않으면 작업을 두 개 이상의 단계로 나누어 처리하는 것이 더 나은 결과를 가져올 수 있습니다.
Whether to use End-to-end Deep Learning

장점:
데이터 중심 접근:
End-to-End Deep Learning은 데이터에 따라 가장 적합한 X에서 Y로의 매핑 함수를 학습합니다.
인간의 선입견을 강요하지 않고 데이터의 통계적 특성을 더 잘 포착할 수 있습니다.
구성 요소 설계 간소화:
End-to-End Deep Learning은 구성 요소 설계를 간소화합니다.
수동으로 특징을 설계하거나 중간 표현을 설계하는 데 덜 시간을 소비하게 됩니다.
단점:
대량의 데이터 필요:
End-to-End Deep Learning은 직접 X에서 Y로의 매핑을 학습하려면 많은 양의 X, Y 데이터가 필요합니다.
종종 하위 작업을 위한 많은 데이터를 얻을 수 있지만 전체 End-to-End 작업에는 데이터가 부족할 수 있습니다.
잠재적으로 유용한 수동 설계 요소 배제:
End-to-End Deep Learning은 유용한 수동 설계 요소를 배제할 수 있습니다.
데이터가 적을 때 수동으로 구성 요소를 설계하면 알고리즘에 인간의 지식을 주입하는 방법이 될 수 있습니다.
적용 방법 결정:
End-to-End Deep Learning을 사용할지 여부를 결정할 때 가장 중요한 질문은 "X에서 Y로의 복잡한 매핑 함수를 학습할 충분한 데이터가 있는가?"입니다.
데이터가 많지 않고 작업이 비교적 단순하다면, End-to-End Deep Learning이 필요한 복잡성을 학습할 수 있는 데이터가 충분하지 않을 수 있습니다.
딥러닝을 사용하여 개별 구성 요소를 학습하고, 가능한 데이터 유형에 따라 어떤 종류의 X에서 Y 매핑을 학습할지 신중하게 선택해야 합니다.
자율 주행 예시:
자율 주행 자동차를 설계할 때, 전체 시스템을 End-to-End Deep Learning으로 처리하지 않고 각 구성 요소를 따로 학습하고 결합하는 것이 더 효과적일 수 있습니다.
센서 입력을 딥 러닝으로 처리하고, 그 후 경로 계획 및 제어를 위한 소프트웨어를 사용하여 보다 안전하고 신뢰성 있는 자율 주행 시스템을 구축할 수 있습니다.
마무리:
End-to-End Deep Learning은 특정 상황에서 잘 작동할 수 있지만, 어디에 적용할지 신중하게 고려해야 합니다.
이 강의를 완료한 경우 머신 러닝 프로젝트를 진행할 때 어떤 방향으로 나아가야 하는지에 대한 우선 순위 결정을 더 잘할 수 있게 되었을 것입니다.