[DeepLearning.AI] Course3.W2 Structuring Machine Learning Projects
Structuring Machine Learning Projects (Course 3 of the Deep Learning Specialization)
Carrying Out Error Analysis (C3W2L01)
1. 오차 분석의 개념과 필요성 도입
학습 알고리즘이 사람 수준의 성능에 미치지 못할 때, 알고리즘이 실수하는 부분을 직접 확인함으로써 향후 방향에 대한 직관을 얻을 수 있는데 이를 ‘오차 분석’이라고 하다.
예시 상황:
고양이 분류기의 정확도가 90%(오차 10%)인데, 개를 고양이로 잘못 분류하는 문제가 발견되었습니다. 이때 “개 분류 문제를 해결하는 데 시간을 쏟아야 할까?”라는 질문이 생깁니다.
2. 성능 향상의 ‘천장(Ceiling)’ 확인
특정 문제(예: 개 사진 오류) 해결에 몇 달을 투자하기 전, 그 노력이 가치 있는지 판단해야 하다.
검증 방법:
개발 세트(Dev set)에서 잘못 라벨링된 예시 100개를 모아 그중 진짜 ‘개’ 사진이 몇 개인지 직접 셉니다.
경우 A (5%가 개):
개 문제를 완벽히 해결해도 오차는 10%에서 9.5%로 줄어드는 데 그칩니다. 즉, 성능 향상의 상한선(천장)이 낮으므로 효율적이지 않을 수 있습니다.
경우 B (50%가 개):
개 문제를 해결하면 오차가 10%에서 5%까지 줄어들 수 있으므로, 시간을 투자할 가치가 있습니다. 이처럼 간단한 수작업과 오차 분석을 통해 불필요한 몇 달의 노력을 아끼고 올바른 방향을 설정할 수 있습니다.
3. 여러 아이디어의 동시 평가 (표 작성법)
개 문제뿐만 아니라 큰 고양이류(사자, 치타 등), 흐린 사진 등 여러 개선 아이디어를 한꺼번에 평가할 수도 있습니다.
실행 방법:
엑셀이나 텍스트 파일에 표를 만들고, 잘못 분류된 이미지들을 하나씩 보며 해당 오류가 어떤 카테고리(개, 큰 고양이, 흐린 사진 등)에 속하는지 체크하다. 분석 도중 ‘인스타그램 필터’와 같은 새로운 오류 유형을 발견하면 즉시 표에 열을 추가하여 반영할 수도 있습니다.
4. 데이터 분석 및 우선순위 결정
분석 결과 각 오류의 비율(예: 개 8%, 큰 고양이 43%, 흐린 사진 61%)을 계산하다. 이 수치를 통해 어떤 문제를 해결했을 때 성능 향상의 폭(천장)이 가장 큰지 파악할 수 있습니다. 예를 들어, 개(8%)보다는 흐린 사진(61%)이나 큰 고양이류(43%) 문제를 해결하는 것이 성능 개선에 훨씬 효과적임을 알 수 있습니다. 이 분석은 엄격한 수학 공식이라기보다는, 팀이 어디에 집중해야 할지 우선순위를 정하는 지표가 됩니다.
오차 분석은 개발 세트에서 잘못 분류된 예시들을 찾아 오류의 종류별로 숫자를 세는 과정이다. 이 과정을 통해 새로운 오류 패턴을 발견하거나, 가장 효율적인 성능 개선 방향을 설정할 수 있습니다.
Cleaning Up Incorrectly Labelled Data (C3W2L02)
1. 학습 세트(Training Set)의 잘못된 라벨 처리
문제 상황:
데이터 입력값(X)에 대한 출력 라벨(Y)이 잘못 표기된 경우(예: 개 사진인데 고양이가 아니라고 라벨링 됨)가 있습니다.
무작위 오차(Random Errors):
딥러닝 알고리즘은 학습 세트의 무작위 오차에 대해서는 꽤 둔감하다. 데이터 양이 충분히 많다면, 실수로 키보드를 잘못 눌러 발생한 것과 같은 무작위 오차는 굳이 수정하지 않고 놔둬도 알고리즘 성능에 큰 악영향을 주지 않습니다.
구조적 오차(Systematic Errors):
단, 특정 조건(예: 흰색 개를 항상 고양이라 분류)에서 지속적으로 발생하는 구조적 오차는 문제가 되므로 수정이 필요하다.
2. 개발 세트(Dev Set)에서의 오차 분석 및 수정 기준
오차 분석 방법:
개발 세트의 오차를 분석할 때, 알고리즘의 실수가 아니라 ‘라벨 자체가 잘못된 경우’를 별도의 항목으로 체크하여 그 비율을 계산해야 하다.
수정 여부 결정:
잘못된 라벨로 인한 오차가 전체 오차에서 차지하는 비중을 보고 수정을 결정하다.
수정이 덜 중요한 경우:
전체 오차율이 10%이고 라벨 오류가 0.6%라면, 라벨 오류는 전체 실수의 아주 작은 부분이다. 이때는 다른 원인(흐릿한 사진 등)을 해결하는 데 집중하는 것이 낫습니다.
수정이 중요한 경우:
모델 성능이 좋아져 전체 오차율이 2%로 줄었는데 라벨 오류가 여전히 0.6%라면, 이는 전체 오차의 30%를 차지하게 됩니다. 이 경우 라벨을 수정하는 것이 성능 평가에 매우 중요해집니다.
3. 개발 세트 라벨 수정 시 가이드라인
목적:
개발 세트의 주된 목적은 두 분류기(A와 B) 중 더 나은 것을 선택하는 것이다. 라벨 오류 때문에 신뢰할 수 없는 평가가 나온다면 반드시 라벨을 수정해야 하다.
동시 적용:
개발 세트의 라벨을 수정한다면, 시험 세트(Test Set)의 라벨도 똑같이 수정해야 하다. 이는 개발 세트와 시험 세트가 동일한 분포를 가져야 올바른 평가와 일반화가 가능하기 때문이다.
맞은 예시도 확인:
가능하다면 알고리즘이 틀린 예시뿐만 아니라, 맞게 분류한 예시 중에서도 라벨이 잘못된 것이 없는지 확인해야 하다. 틀린 것만 고치면 알고리즘 성능이 실제보다 더 좋게 평가되는 편향(Bias)이 생길 수 있습니다. 다만, 데이터 양이 많으면 시간이 오래 걸리므로 항상 수행하기는 어렵습니다.
4. 학습 세트와 개발/시험 세트의 관계
개발 및 시험 세트의 라벨을 수정하더라도, 학습 세트의 라벨까지 반드시 수정할 필요는 없습니다. 학습 세트는 개발/시험 세트와 분포가 약간 달라도 알고리즘이 잘 작동할 수 있기 때문이다.
실용적인 머신러닝 시스템을 구축할 때는 연구자나 엔지니어가 직접 데이터를 살펴보고 수작업으로 오차를 분석하는 과정이 필수적이다. 지루할 수 있지만, 수백 개의 예시를 직접 확인하며 오류 비율을 세어보는 것이 프로젝트의 우선순위를 정하는 데 큰 도움이 됩니다.
ai: 개발 세트는 나침반과 같습니다. 나침반이 약간 흔들려도(무작위 오차) 대략적인 북쪽은 알 수 있지만, 나침반 자체가 고장 나서 엉뚱한 방향을 가리킨다면(높은 비율의 라벨 오류) 목적지(더 좋은 모델 선택)를 찾을 수 없습니다. 이때는 나침반을 수리(라벨 수정)해야 하다.
첫 번째 시스템을 빠르게 구축한 다음 반복 (C3W2L03)
새로운 머신러닝 애플리케이션을 개발할 때 너무 깊게 고민하지 말고, 일단 빠르게 시스템을 구축한 뒤 반복적으로 개선하라는 것이다.
1. 문제 상황: 개선할 방향이 너무 많음 (음성 인식 예시)
강의는 음성 인식 시스템을 예로 들어 설명을 시작하다. 음성 인식 시스템을 개선하는 데는 다음과 같이 수많은 방향성이 존재하다. 배경 잡음(카페 소음, 차 소리 등)에 강하게 만들기 사투리나 억양을 잘 알아듣게 하기 마이크와 멀리 떨어진 소리(원거리 음성 인식) 처리하기 어린아이의 말투나 더듬는 말 처리하기
일반적인 머신러닝 프로젝트에는 약 50가지의 서로 다른 개선 방향이 있을 수 있는데, 처음부터 어느 부분에 집중해야 할지 결정하는 것은 매우 어렵습니다.
2. 해결책: 첫 시스템을 빠르게 구축하기
따라서 새로운 애플리케이션을 만들 때는 고민하는 시간을 줄이고 첫 시스템을 빠르게 만드는 것이 중요하다.
목표 설정:
개발(Dev) 세트, 시험(Test) 세트, 그리고 평가 척도(Metric)를 먼저 설정.
신속한 구축:
학습 데이터를 찾아 시스템을 학습시키고, 설정한 척도로 성능을 평가하다. 이 초기 시스템은 완벽할 필요가 없으며, 대충 빠르게 구현하는 것이 핵심이다.
3. 데이터에 기반한 우선순위 결정 (오차 분석)
일단 시스템이 만들어지면, 편향-분산 분석(Bias-Variance Analysis)과 오차 분석(Error Analysis)을 수행할 수 있게 됩니다. 학습된 시스템을 분석하여 실제로 어떤 문제가 가장 큰지 파악하다. 예를 들어, 오차 분석 결과 대부분의 오류가 ‘마이크와 화자 사이의 거리’ 때문이라는 것이 밝혀지면, 그때 비로소 ‘원거리 음성 인식’ 기술에 집중하면 됩니다. 즉, 막연한 추측이 아니라 분석 결과에 따라 가장 가치 있는 개선 방향을 결정하는 것이다.
4. 예외 상황 및 일반적인 조언
예외:
만약 개발자가 해당 분야에 이미 많은 경험이 있거나, 얼굴 인식(Face Recognition)처럼 이미 해결책이 명확한 논문이 많은 분야라면 처음부터 복잡한 시스템을 구축해도 됩니다,.
일반적인 경향:
많은 팀이 너무 깊게 고민해서 시스템을 지나치게 복잡하게 만드는 실수를 범하다.
결론:
머신러닝 알고리즘 자체를 발명하는 것이 아니라 작동하는 시스템을 만드는 것이 목표라면, 대충 빨리 시스템을 만든 뒤 분석을 통해 다음 할 일의 우선순위를 정하는 것이 최선이다.
이해를 돕기 위한 비유: 이 전략은 ‘과녁 맞추기’ 와 비슷하다. 안대가 씌워진 상태(데이터가 없는 상태)에서 처음부터 10점을 쏘려고 애쓰는 것보다, 일단 아무 데나 화살을 한 발 쏘아본 뒤(첫 시스템 구축), 그 화살이 꽂힌 위치를 보고(오차 분석) 영점을 조정하여 다음 화살을 쏘는 것이 훨씬 더 빠르고 정확하게 과녁을 맞히는 방법이다.
Training and Testing on Diffrent Distributions (C3W2L04)
1. 딥러닝 데이터 수집의 딜레마 (도입부)
딥러닝 알고리즘은 많은 훈련 데이터를 필요로 하다. 그래서 많은 팀이 개발(Dev) 및 시험(Test) 세트와 분포가 다른 데이터라도 훈련 세트에 추가하곤 하다. 예를 들어, 모바일 앱을 위한 고양이 분류기를 만들 때 실제 목표인 ‘사용자가 업로드한 흐릿한 사진’은 1만 장뿐이지만, 웹에서 다운로드한 ‘선명한 고화질 사진’은 20만 장이나 되는 상황이 발생할 수 있습니다.
2. 방법 1: 데이터를 모두 섞는 것 (비추천)
가장 먼저 떠올릴 수 있는 방법은 웹 사진(20만 장)과 모바일 앱 사진(1만 장)을 모두 합쳐서 무작위로 섞은 뒤 훈련, 개발, 시험 세트로 나누는 것이다.
장점:
훈련, 개발, 시험 세트가 모두 같은 분포를 가집니다.
단점(치명적):
개발 세트(예: 2,500장) 안에 실제 목표인 모바일 사진은 매우 적고(약 119장), 대부분 웹 사진으로 채워집니다. 이렇게 되면 팀은 실제 목표가 아닌 웹 사진 분포에 최적화하는 데 시간을 낭비하게 됩니다.
3. 방법 2: 개발/시험 세트를 목표 분포로 고정 (추천)
강의에서 권장하는 방법은 개발과 시험 세트를 오직 실제 목표 데이터(모바일 앱 사진)로만 구성하는 것이다.
구성 예시:
훈련 세트:
웹 사진 20만 장 전부 + 모바일 앱 사진 5,000장 (총 205,000장).
개발/시험 세트:
남은 모바일 앱 사진 각각 2,500장.
장점:
비록 훈련 세트의 분포가 시험 세트와 다르다는 단점은 있지만, 팀이 실제로 해결하고자 하는 목표(모바일 앱 사진 분류)를 명확히 조준할 수 있습니다.
4. 추가 예시: 음성 인식 백미러
중국 시장용 ‘음성 인식 백미러’를 개발한다고 가정해 봅시다.
데이터 상황:
실제 백미러에서 수집된 데이터는 적지만, 일반적인 음성 데이터(다른 앱, 구매한 데이터 등)는 50만 개로 매우 많습니다.
적용:
훈련 세트에는 일반 음성 데이터 50만 개와 백미러 데이터 일부(예: 1만 개)를 넣고, 개발 및 시험 세트는 오직 실제 백미러 데이터(예: 각 5천 개)로만 구성 이 방식은 훈련 데이터의 크기를 키우면서도, 성능 검증은 실제 제품 환경(백미러)에 맞춰 진행할 수 있는 합리적인 방법이다.
훈련 세트의 데이터가 개발/시험 세트와 다른 분포에서 얻어졌더라도, 더 큰 훈련 세트를 확보함으로써 학습 알고리즘의 성능을 높일 수 있습니다. 핵심은 개발/시험 세트를 여러분이 실제로 중요하게 여기는 데이터 분포로 구성해야 한다는 것이다.
Bias and Variance With Mismatched Data (C3W2L05)
훈련 데이터와 개발(Dev)/테스트(Test) 데이터의 분포가 서로 다를 때, 편향(Bias)과 분산(Variance)을 어떻게 분석해야 하는지에 대해 다룹니다.
1. 문제 제기: 분포가 다를 때의 오차 분석 난이도
일반적으로는 훈련 오차와 개발 세트 오차를 비교하여 분산(과대적합) 문제를 파악하다. 하지만 훈련 세트와 개발 세트의 분포가 다를 경우, 개발 세트 오차가 높게 나왔을 때 이것이 알고리즘이 훈련 데이터에 과대적합(분산 문제)되어서인지, 아니면 개발 세트의 데이터 자체가 훈련 데이터와 너무 달라서(데이터 불일치)인지 구분하기 어렵습니다.
2. 해결책: ‘훈련-개발 세트(Training-Dev Set)’ 도입
두 가지 원인을 구분하기 위해 ‘훈련-개발 세트’라는 새로운 데이터셋을 정의
특징:
훈련 세트에서 일부를 떼어낸 것으로, 훈련 세트와 동일한 분포를 가지지만 신경망 학습(역전파)에는 사용하지 않는 데이터이다.
3. 오차 비교를 통한 원인 분석 (핵심 시나리오)
이제 ‘훈련 오차’, ‘훈련-개발 오차’, ‘개발 오차’ 세 가지를 비교하여 문제를 진단하다.
분산(Variance) 문제:
훈련 오차(예: 1%)는 낮은데, 같은 분포인 훈련-개발 오차(예: 9%)가 높게 나올 경우이다. 이는 알고리즘이 훈련 데이터는 잘 외웠지만, 같은 분포의 보지 못한 데이터에는 일반화되지 못했음을 의미하다.
데이터 불일치(Data Mismatch) 문제:
훈련 오차와 훈련-개발 오차(예: 1.5%)는 비슷한데, 분포가 다른 개발 오차(예: 10%)가 급격히 높게 나올 경우이다. 이는 알고리즘 학습은 잘 되었으나, 훈련 데이터와 개발 데이터의 성격이 너무 달라서 성능이 떨어지는 것이다.
4. 일반적인 오차 분석 프레임워크
회피 가능한 편향(Avoidable Bias):
인간 수준 오차 vs 훈련 오차의 차이.
분산(Variance):
훈련 오차 vs 훈련-개발 오차의 차이.
데이터 불일치(Data Mismatch):
훈련-개발 오차 vs 개발 오차의 차이.
개발 세트 과대적합(Overfitting to Dev):
개발 오차 vs 테스트 오차의 차이.
5. 예외 상황 및 심화 분석표
예외:
드물지만 훈련 데이터가 실제 개발 데이터보다 훨씬 어려운 경우, 개발 세트 오차가 오히려 더 낮게 나올 수도 있습니다(예: 잡음이 많은 훈련 데이터 vs 깨끗한 실제 데이터).
심화 분석:
‘데이터의 종류(일반 데이터 vs 타겟 데이터)’와 ‘알고리즘 주체(인간 vs AI)’를 축으로 하는 표를 만들어 분석하면, 인간에게도 타겟 데이터가 어려운 것인지 아니면 AI 모델의 문제인지 등을 더 정밀하게 파악할 수 있습니다.
다른 분포의 데이터를 훈련에 추가하는 것은 데이터 양을 늘리는 좋은 전략이지만, ‘데이터 불일치’라는 잠재적 문제를 야기할 수 있습니다.
ai: 수능 시험(개발 세트)을 준비하는 학생이 있습니다.
분산 문제:
교과서(훈련 세트)에 있는 문제는 달달 외워서 다 맞추는데, 교과서에 있는 처음 보는 응용문제(훈련-개발 세트)는 못 푸는 경우이다. (응용력 부족)
데이터 불일치 문제:
교과서 문제도 잘 풀고 응용문제도 잘 푸는데, 수능 시험 문제가 교과서와 스타일이 완전히 달라서(예: EBS 연계율 0%) 못 푸는 경우이다. (공부 자료와 실전의 괴리)
Addressing Data Mismatch (C3W2L06)
훈련(Training) 데이터와 개발/테스트(Dev/Test) 데이터의 분포가 서로 다를 때 발생하는 데이터 불일치 문제를 해결하는 전략을 다룹니다.
1. 데이터 불일치 확인을 위한 오차 분석
훈련 세트와 개발/테스트 세트의 분포가 다르면 데이터 불일치 문제가 발생할 수 있으며, 이를 해결할 완벽하고 체계적인 공식은 없지만 시도할 수 있는 방법들이 있습니다. 문제가 발견되면 먼저 오차 분석을 수행하여 훈련 세트와 개발 세트의 차이점이 무엇인지 파악해야 하다. 이때 테스트 세트의 과대 적합을 막기 위해 개발 세트를 분석해야 하다. 예를 들어, 음성 인식 백미러를 개발할 때 개발 세트 데이터를 직접 들어보고 ‘자동차 소음’이 많다거나 ‘거리 번호’를 인식하지 못한다는 구체적인 차이점을 찾아냅니다.
2. 훈련 데이터를 개발 세트와 유사하게 만들기
오차 분석을 통해 개발 세트가 훈련 세트와 어떻게 다른지(예: 소음, 특정 단어 등) 이해했다면, 훈련 데이터를 개발 세트와 비슷하게 만들 방법을 찾아야 하다. 배경 소음이 문제라면 소음 데이터를 추가하고, 거리 번호 인식이 문제라면 관련 데이터를 의도적으로 수집하여 훈련 세트에 추가하는 방식이다. 이 과정이 모든 문제 해결을 보장하지는 않지만, 훈련 데이터를 개발 세트와 더 유사하게 만들어 성능을 높이는 데 도움이 됩니다,.
3. 인공적 데이터 합성 (Artificial Data Synthesis)
개발 세트와 유사한 데이터를 확보하기 위해 인공적 데이터 합성 기술을 사용할 수 있습니다.
음성 인식 예시:
깨끗하게 녹음된 음성 파일에 별도로 녹음된 ‘자동차 소음’이나 ‘잔향’ 효과를 합쳐서, 마치 시끄러운 차 안에서 말하는 것과 같은 데이터를 생성할 수 있습니다,. 이 방법을 사용하면 실제로 수천 시간 동안 운전하며 녹음할 필요 없이, 많은 양의 훈련 데이터를 빠르게 만들 수 있습니다.
4. 데이터 합성 시 주의할 점: 과대 적합
음성 합성의 위험:
1만 시간의 음성 데이터에 단 1시간 분량의 자동차 소음만 반복해서 합성할 경우, 사람의 귀에는 자연스럽게 들리지만 학습 알고리즘은 그 특정 1시간의 소음에 과대 적합(Overfitting) 될 수 있습니다. 인공적으로 합성한 데이터가 전체 데이터 공간(모든 가능한 소음) 중 극히 일부(작은 부분 집합)만을 반영하고 있지 않은지 주의해야 하다.
5. 컴퓨터 비전에서의 데이터 합성 사례
자율 주행 예시:
컴퓨터 그래픽이나 비디오 게임의 이미지를 사용하여 자동차 인식 시스템을 훈련시킬 수 있습니다.
시각 합성의 위험:
비디오 게임 속 이미지가 아무리 사실적이라 해도, 게임 내 자동차 모델이 20가지뿐이라면 알고리즘은 이 20가지 모델에만 과대 적합하게 됩니다. 실제 세상의 자동차 디자인은 훨씬 다양하기 때문이다. 즉, 합성된 데이터가 사람 눈에는 괜찮아 보여도 실제 데이터 분포의 다양성을 담지 못할 수 있다는 점을 경계해야 하다.
데이터 불일치 문제를 해결하기 위해 오차 분석을 통해 두 데이터 분포의 차이를 이해하고, 인공 데이터 합성 등을 통해 훈련 데이터를 개발 세트와 비슷하게 만들어야 하다. 단, 데이터 합성 시 전체 데이터의 다양성을 놓치고 일부 특성만 시뮬레이션하여 모델이 편향되지 않도록 주의해야 하다.
ai: 인공 데이터 합성의 위험성은 ‘동물원 구경’과 비슷하다. 동물원에서 본 사자 20마리만 보고 ‘사자’를 학습한 사람은(합성 데이터 과대적합), 야생에 존재하는 수만 마리의 다양한 사자들을 만났을 때(실제 데이터) 제대로 알아보지 못할 수 있습니다. 겉보기엔 진짜 사자 같아도(사람 눈엔 자연스러움), 다양성이 부족하기 때문이다.
전이학습 (C3W2L07)
1. 전이 학습(Transfer Learning)의 개념과 기본 절차
개념:
신경망이 방대한 데이터(예: 고양이, 개 등의 이미지 인식)를 통해 학습한 지식을, 데이터가 적은 다른 작업(예: X-ray 판독)에 적용하는 기술이다.
구현 방법:
- 기존 신경망(Task A)의 마지막 출력층과 그 연결(가중치)을 삭제하다.
- 새로운 작업(Task B)을 위한 출력층을 만들고 가중치를 무작위로 초기화하다.
- 새로운 데이터셋(Task B)으로 신경망을 재훈련시킵니다.
2. 데이터 양에 따른 재훈련 전략
데이터가 적을 때:
마지막 출력층(또는 마지막 한두 개 층)의 변수만 재훈련하고, 나머지 층은 고정.
데이터가 많을 때:
신경망의 모든 층의 변수를 재훈련.
사전 훈련(Pre-training):
첫 번째 작업(Task A)의 데이터로 신경망의 일반적인 변수들을 학습하는 과정.
세부 조정(Fine-tuning):
새로운 작업(Task B)의 데이터로 변수들을 다시 업데이트하는 과정.
3. 전이 학습이 효과적인 이유
대규모 데이터(이미지 인식)에서 학습한 낮은 수준의 특성(윤곽, 곡선, 물체 구조 등) 에 대한 지식은 데이터가 적은 작업(방사선 의학)에서도 유용하게 쓰일 수 있기 때문이다.
4. 다른 예시: 음성 인식
일반적인 음성 인식(Task A) 모델을 ‘시작 단어(Trigger Word, 예: 알렉사, 시리야)’ 감지 시스템(Task B)으로 전이할 수 있습니다. 필요에 따라 마지막 층뿐만 아니라 여러 개의 새로운 층을 추가하여 학습시킬 수도 있습니다.
5. 전이 학습 적용 조건 (언제 사용하는가?)
데이터 비율:
전이하려는 소스 문제(Task A)의 데이터가 목표 문제(Task B)의 데이터보다 월등히 많을 때 효과적이다. 예: 100만 장의 일반 이미지 $\rightarrow$ 100장의 X-ray 이미지 (효과적). 예: 1만 시간의 음성 데이터 $\rightarrow$ 1시간의 시작 단어 데이터 (효과적).
반대의 경우:
목표 문제(Task B)의 데이터가 이미 충분히 많다면(Task A보다 많다면), 전이 학습은 큰 의미가 없습니다.
6. 전이 학습 성공을 위한 3가지
- 입력 형식 동일:
Task A와 Task B가 같은 입력($x$)을 가져야 하다 (둘 다 이미지거나, 둘 다 음성). - 데이터 양:
Task A의 데이터 양이 Task B보다 훨씬 많아야 하다. - 특성 공유:
Task A에서 배운 낮은 수준의 특성들이 Task B를 학습하는 데 도움이 되어야 하다.
전이 학습은 목표 작업(Task B)의 데이터가 부족할 때, 데이터가 풍부한 다른 작업(Task A)의 지식을 빌려 성능을 높이는 강력한 방법이다. (다음 강의 예고: 동시에 여러 작업을 학습하는 ‘다중 작업 학습’에 대해 다룰 예정이다.)
Multitask Learning (C3W2L08)
1. 다중 작업 학습(Multitask Learning)의 개념과 예시
전이 학습이 A에서 B로 순차적으로 지식을 옮기는 것이라면, 다중 작업 학습은 하나의 신경망이 여러 작업을 동시에 수행하며 서로 도움을 주도록 하는 것이다.
자율 주행 예시:
하나의 이미지를 입력받아 보행자, 자동차, 정지 표지판, 신호등이라는 4가지 대상의 유무를 동시에 감지해야 하다. 이때 출력 라벨($y$)은 하나의 숫자가 아니라 (4, 1) 차원의 벡터가 됩니다.
2. 신경망 구조와 손실 함수 구성
구조:
신경망의 출력층은 4개의 노드를 가지며, 각각의 대상이 존재하는지를 예측.
손실 함수:
전체 손실은 4가지 개별 작업에 대한 로지스틱 손실의 합으로 계산됩니다.
소프트맥스와의 차이:
소프트맥스 회귀는 한 이미지에 하나의 클래스만 할당하지만, 다중 작업 학습은 한 이미지에 자동차와 표지판이 동시에 있는 것처럼 여러 레이블이 1(존재함)이 될 수 있다는 점이 다릅니다.
3. 일부 레이블이 없는 데이터의 처리
데이터셋의 일부 이미지가 모든 대상에 대해 라벨링 되어 있지 않아도 학습이 가능하다. 예를 들어, 어떤 이미지는 ‘자동차’ 유무만 표시되어 있고 나머지는 모르는(물음표) 상태라면, 손실 함수 계산 시 값이 있는(0 또는 1) 항목만 합산하고 물음표 부분은 무시하면 됩니다.
4. 다중 작업 학습 적용을 위한 3가지 조건
일반적으로 다음 조건들을 만족할 때 다중 작업 학습이 효과적이다.
- 특성 공유:
학습하려는 작업들이 낮은 수준의 특성(예: 도로의 윤곽, 형태 등)을 공유할 때 유리하다. - 데이터 보조 효과:
작업의 수가 많을수록 좋습니다. 예를 들어 100개의 작업을 동시에 학습할 때, 특정 작업(A)의 데이터가 1,000개뿐이라도 나머지 99개 작업의 데이터(99,000개)가 A의 학습을 도와주는 효과를 냅니다. - 충분히 큰 신경망:
신경망의 크기가 충분히 커야 하다. 크기가 작으면 작업을 분리하는 것보다 성능이 떨어질 수 있지만, 신경망이 크다면 다중 작업 학습이 대개 더 나은 성능을 보이다.
5. 전이 학습과의 비교 및 결론
실제 현장에서는 다중 작업 학습보다 전이 학습이 훨씬 더 많이 사용됩니다. 다중 작업 학습은 컴퓨터 비전의 물체 감지(Object Detection)와 같이, 한 번에 많은 대상을 동시에 찾아야 하는 특정 영역에서 주로 사용되는 유용한 도구이다.
What is end-to-end deep learning (C3W2L09)
1. End-to-End 딥러닝의 정의와 음성 인식 예시
정의:
여러 단계의 처리 과정(파이프라인)이 필요한 시스템을 하나의 신경망으로 재배치하여, 입력($x$)에서 출력($y$)을 한 번에 얻는 방식이다.
음성 인식의 변화:
전통적 방식:
오디오 특징 추출(MFCC) $\rightarrow$ 음소(Phoneme) 감지 $\rightarrow$ 단어 조합 $\rightarrow$ 대본 작성의 복잡한 단계를 거쳤습니다.
End-to-End 방식:
녹음 파일($x$)을 입력하면 중간 단계 없이 바로 대본($y$)을 출력하도록 신경망을 훈련시킵니다.
2. 장점과 데이터의 중요성
사회학적 파장:
이 방식은 특징 추출 등 중간 단계를 연구해 온 사람들의 노력을 구식으로 만들 만큼 강력했습니다.
데이터 요구량:
End-to-End 학습은 사전에 많은 정보가 필요하다. 3,000시간 정도의 데이터로는 기존 파이프라인 방식이 더 나을 수 있지만, 10,000~100,000시간 이상의 방대한 데이터가 있다면 End-to-End 방식이 훨씬 뛰어난 성능을 발휘하다. 즉, 데이터가 적으면 기존 방식이, 데이터가 아주 많으면 End-to-End가 유리하다.
3. 얼굴 인식 개찰구 예시 (End-to-End가 불리한 경우)
Baidu의 얼굴 인식 개찰구를 만들 때, 카메라 전체 이미지($x$)에서 바로 사람의 신분($y$)을 맞추는 End-to-End 방식은 최선이 아닙니다. 카메라와의 거리나 각도에 따라 사람의 크기와 위치가 제각각이기 때문이다.
다단계 접근법(권장):
- 얼굴이 어디 있는지 감지하여 잘라냄(Crop).
- 잘라낸 얼굴 이미지를 신경망에 넣어 신분을 확인.
이유:
‘얼굴 감지’ 작업과 ‘얼굴 인식’ 작업 각각에 대한 데이터는 매우 풍부하지만, ‘개찰구 원본 사진 $\rightarrow$ 신분’으로 바로 연결되는($x, y$) 데이터는 상대적으로 부족하기 때문이다. 따라서 여기서는 문제를 쪼개는 것이 더 성능이 좋습니다.
4. 기계 번역과 X-ray 예시
기계 번역:
영어-불어 번역과 같은 작업은 $(x, y)$ 쌍의 데이터가 엄청나게 많기 때문에 End-to-End 딥러닝이 아주 효과적이다.
뼈 나이 측정:
손 X-ray 사진을 보고 아이의 나이를 맞추는 작업은 데이터가 부족하여 End-to-End 방식이 잘 작동하지 않습니다. 대신, ‘뼈마디 찾기’ $\rightarrow$ ‘길이 측정’ $\rightarrow$ ‘평균표 대조’라는 다단계 방식이 훨씬 효율적이다.
End-to-End 딥러닝은 시스템을 단순화하고 중간 과정을 설계하는 수고를 덜어주지만 만병통치약은 아닙니다. 방대한 데이터가 있을 때는 End-to-End가 강력하지만, 데이터가 부족할 때는 문제를 여러 단계로 나누어 각각 해결하는 것이 더 나을 수 있습니다.
ai: End-to-End 딥러닝은 ‘직관에 의한 요리’ 와 비슷하다. 수만 번 요리를 해본(데이터가 방대한) 셰프는 레시피 없이도 재료만 보고 바로 훌륭한 요리를 만들어냅니다. 하지만 초보자(데이터가 부족한 모델)에게는 “재료 썰기 $\rightarrow$ 볶기 $\rightarrow$ 간 맞추기”처럼 ‘단계별 레시피(다단계 접근)’ 를 주는 것이 실패 확률을 줄이는 훨씬 더 좋은 방법이다.
End-to-End 딥러닝 사용 여부 결정하기 (C3W2L10)
1. End-to-End 딥러닝의 장점
데이터가 직접 말하게 함:
$(x, y)$ 데이터가 충분하다면, 사람의 선입견(preconception)이 들어간 중간 단계 없이 데이터 그 자체에서 최적의 함수를 학습할 수 있습니다.
예시 (음성 인식):
과거에는 언어학자가 만든 인위적인 개념인 ‘음소(phoneme)’를 추출하는 단계를 거쳤으나, End-to-End 방식은 이를 건너뛰고 데이터가 스스로 원하는 표현법을 학습하게 하여 성능을 높일 수 있습니다.
설계의 단순화:
특징 추출이나 중간 요소를 직접 설계하는 데 시간을 쏟지 않아도 되므로 전체 작업 흐름이 단순해집니다.
2. End-to-End 딥러닝의 단점
막대한 데이터 필요:
입력($x$)에서 출력($y$)으로 한 번에 연결하려면 방대한 양의 데이터가 필요하다. 데이터가 부족할 경우, 얼굴 인식 시스템처럼 단계를 나누어(얼굴 감지 $\rightarrow$ 인식) 처리하는 방식보다 성능이 떨어질 수 있습니다.
핸드 디자인(Hand-design) 요소의 배제:
사람이 직접 설계한 중간 요소는 알고리즘에 유용한 인간의 지식을 주입하는 방법이다. 데이터가 적을 때는 이러한 지식이 매우 중요하지만, End-to-End 방식은 이를 배제하므로 데이터가 부족한 상황에서는 불리할 수 있습니다.
3. 결정 기준: 데이터의 충분함
End-to-End 방식을 사용할지 결정하는 가장 중요한 기준은 “$x$를 $y$로 매핑할 수 있는 함수를 학습하기에 충분한 데이터를 가지고 있는가?”이다. 이미지에서 뼈의 위치를 찾거나 얼굴을 찾는 단순한 문제는 적은 데이터로도 가능하지만, 손 모양만 보고 아이의 나이를 맞추는 것과 같이 복잡한 문제는 훨씬 많은 데이터가 필요하다.
4. 복잡한 예시: 자율 주행
전통적 접근(모듈식):
이미지 입력 $\rightarrow$ 차량/보행자 감지 $\rightarrow$ 경로 계획(Motion Planning) $\rightarrow$ 제어(핸들/브레이크 조작)의 단계를 거칩니다.
End-to-End 접근:
이미지를 입력받아 바로 핸들 조작 명령을 출력하는 방식이다.
현실적 판단:
현재 데이터 가용성이나 안전성을 고려할 때, 자율 주행 분야에서는 순수한 End-to-End 방식보다는 각 단계를 명확히 나누는 접근법이 더 효과적인 경우가 많습니다.
End-to-End 딥러닝은 강력하지만 만능은 아닙니다. 데이터가 충분한지, 핸드 디자인된 요소가 필요한지 고려하여 전략적으로 사용해야 하다.