티스토리 뷰
개발 데이터와 테스트 데이터가 같은 분포를 가지는 상태에서 학습을 시키고 있다고 가정하자. 그러면 단순히 성능을 향상 시키기 위해서 항상 많은 학습 데이터를 수집하려고 할 것이다. 그렇지 않나?
데이터를 많이 가지는 것 자체가 물론 나쁜건 아니지만, 그렇다고 바라는 만큼 항상이 도움이 되지는 않는다. 어쩌면 데이터를 추가로 수집하는 작업 자체가 시간 낭비가 될 수 있다. 그러면 언제 데이터를 수집하고, 언제 수집하지 말고를 어떻게 결정해야 할까?
머신러닝 작업에서 오류를 발생시키는 요인이 두개가 있는데, 그게 bias와 variance 이다. 이 두 요인에 대해서 이해하는 것이 아마 데이터를 수집해야 할지 말지 결정하는 것을 도와 줄 것이고, 이게 성능을 향상시켜주는 다른 작업과 같이 시간을 적절하게 쓰게 해줄 것이다.
만약 우리가 약 5% 정도의 오류가 발생하는 고양이 분류기를 만들길 원한다고 가정해보자. 현재 학습 데이터에서는 15% 정도의 오류율을 보이고, 개발 데이터에서는 16% 정도의 오류가 발생한다고 보자. 이 상황에서는 데이터를 추가하는 작업 자체가 그렇게 도움이 안 될수 있다. 이 경우 다른 변화에 대해서 초점을 맞춰봐야 한다. 실제로 학습 데이터의 양을 늘리는 것은 해당 데이터에 대한 학습을 더 어렵게 만들 수 있다.( 이 이유에 대해서는 뒤의 포스트에서 다루고자 한다.)
만약 학습 데이터상에서 오류율이 15% 이고( 다르게 표현하면 85%의 정확성), 목표는 5%의 오류율(95%의 정확성)이라면 첫번째로 해결해야 할 문제는 학습 데이터에 대한 알고리즘 성능을 향상시키는 것이다. 보통 개발/테스트 데이터의 성능 학습 데이터에서의 성능보다 더 안 좋게 나온다. 그래서 만약 이미 보여진 데이터 상에서 85% 의 정확성을 얻고 있다면, 미지의 데이터에 대해서 95%의 정확성을 얻을 가능성은 거의 없다.
만약 개발 데이터 상에서 16%의 오류율(84%의 정확성)을 가진다고 하면, 이 16%의 오류율을 두가지 측면으로 나눠서 바라볼 수 있다.
- 첫번째는 학습 데이터 상에서 알고리즘의 오류율을 들 수 있다. 이 예제에서는 15%가 될 것이다. 정형화된 건 아니지만, 이런 값을 알고리즘의 bias라고 표현한다.
- 두번째는 개발/테스트 데이터 상에서의 성능이 학습 데이터에서의 성능보다 얼마나 좋지 않냐는 것이다. 이 예제에서는 개발 데이터상에서 측정했을 때는 학습 데이터 보다 1% 안 좋게 나왔다. 정형화된 건 아니지만, 이런 값을 알고리즘의 Variance라고 표현한다.
(통계학상에서 Bias와 Variance에 대한 정의는 조금더 구체화되어 있는데, 우리는 신경쓸 필요가 없다. 대략적으로 말해서 bias는 매우 큰 학습 데이터 내에서 알고리즘이 가지는 오류율이다. Variance는 같은 환경 상에서 개발 데이터에서의 오류율이 학습 데이터에서의 오류율 보다 얼마나 안좋은지를 나타낸 값이다. 보통 오류 측정치가 mean squared error 형식으로 나온다면, bias와 Variance를 활용해서 하나의 공식으로 정의할 수 있고, 이를 통해서 총 오류 = Bias + Variance라는 것을 증명할 수 있다. 하지만 머신러닝 문제상에서 얼마나 성능을 이끌어 낼 수 있는지를 결정하고자 하는 목적이라면, 기존의 비 정형화된 형태의 bias와 variance에 대한 정의가 필요할 것이다.)
우선 알고리즘에 대한 개선이 이뤄지면 첫번째 오류항인 bias에 영향을 줄텐데 이를 통해서 학습 데이터에 대한 성능을 향상시킬 수 있다. 두번째 항인 variance에도 영향이 있을텐데, 이를 통해서 학습 데이터 로부터 개발/테스트 데이터로 쉽게 일반화 시킬 수 있다. (시스템 구조적 변화를 통해서 bias와 variance를 급격히 줄일 수 있는 몇가지 방법이 있는데, 이는 정의하거나 구현하기가 어려운 편이다.) 뭔가 유의마한 변화를 가져오는 개선을 선택하기 위해서는 두가지 오류항 중 어떤 것이 영향이 더 큰지를 이해하는 것이 매우 도움이 된다.
bias와 variance에 대한 직관을 기르는 것은 알고리즘 개발시 효과적인 개선을 선택하는데 도움이 된다.
< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 20. Bias and Variance: The two big sources of error을 번역한 내용입니다.>
'Study > AI' 카테고리의 다른 글
[MLY] Bias와 Variance에 대한 해결 방법 (0) | 2018.09.11 |
---|---|
[MLY] 이상적인 오류율과의 비교 (0) | 2018.09.11 |
[MLY] Bias와 Variance의 예시들 (0) | 2018.09.10 |
[MLY] 기본적인 오류 평가시 고려해야 할 사항 (0) | 2018.09.10 |
[MLY] Eyeball 데이터와 Blackbox 데이터는 얼마나 커야 할까? (0) | 2018.09.09 |
[MLY] 개발 데이터가 많은 경우, 두 집합으로 나누고 하나에서만 확인하기 (0) | 2018.09.08 |
[MLY] 개발 데이터상에 잘못 라벨링된 것 정리하기 (0) | 2018.09.08 |
- Total
- Today
- Yesterday
- Kinect SDK
- ai
- Policy Gradient
- End-To-End
- Pipeline
- Off-policy
- Variance
- processing
- Kinect for windows
- arduino
- RL
- SketchFlow
- dynamic programming
- Gan
- 파이썬
- Windows Phone 7
- Expression Blend 4
- Distribution
- DepthStream
- Kinect
- ColorStream
- TensorFlow Lite
- 한빛미디어
- Offline RL
- 딥러닝
- PowerPoint
- 강화학습
- reward
- windows 8
- bias
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |