지금 음성 인식 시스템을 만들고 있고, 데이터로써 오디오 클립을 가지고 있다. 만약 지금 데이터가 잡음이 많아서 인간도 10%의 오류를 나타내고 있다고 가정해보자. 그리고 지금 시스템도 이미 8%의 오류를 얻고 있다고 치자. 조금더 진전하기 위해서 앞에서 언급했던 3가지 방법을 사용해볼 수 있을까? 만약 인간이 지금 만들고 있는 머신러닝 시스템보다 확연하게 잘하는 것에 대한 데이터 집합을 다룬다면, 진척을 위해서 그 방법들을 활용해볼 수 있다. 예를 들어 잡음이 섞인 오디오를 인식하는 것에서 시스템이 인간보다 잘한다고 가정해도, 뭔가 발음이 빠른 음성을 번역하는 것은 인간이 더 잘 할수도 있다. 이렇게 발음이 빠른 음성 데이터 상에서는: 1. 머신러닝 알고리즘이 수행하는 것보다 더 나은 성능을 보여주는 ..
만약 지금 다루고 있는 것이 의학 이미지 관련 작업인데, X레이 이미지로부터 자동적으로 진단을 해주는 거라고 가정해보자. 의학적 배경이 없는 상태에서 일반 사람이 약간의 일반적인 학습을 진행하면 15% 정도의 오류를 얻는다. 초급 의사는 10%의 오류를 얻고, 경험이 있는 의사는 5% 정도의 오류를 얻는다. 만약 각 이미지에 대해서 분석하고 논의할 수 있는 의사 집단이 있으면 2% 정도의 오류를 얻는다. 이때 어떤 오류율이 "인간의 성능"이라고 정의할 수 있을까? 이 경우, 본인은 2%를 우리가 얻고자 하는 이상적인 오류율에 대한 인간의 성능 기대치로 사용한다. 당신도 인간 성능과 비교하는데 있어 이전 장에서 다룬 3가지 이유를 들어서 2%를 목표치로 정해도 좋다. - 라벨링 해주는 사람으로부터 데이터를..
많은 머신러닝 시스템은 인간이 잘하는 것들을 자동화하는데 목적을 두고 있다. 예를 들어 이미지 인식이나, 음성 인식, 스팸 메일 분류같은 것이 거기에 속한다. 학습 알고리즘은 많이 발전되어서 이제는 인간이 하는 것보다 더 뛰어난 성능을 보여주고 있다. 게다가, 머신러닝 시스템을 만드는 것이 인간이 잘하는 일을 하는 것보다 쉬운 몇가지 이유가 있다. 1. 사람이 라벨링해주는 것으로부터 데이터를 얻어내기 용이해졌다. : 예를 들어 사람이 고양이 이미지를 잘 인식하기 때문에, 사람한테는 학습 알고리즘한테 정확성을 높일 수 있는 라벨을 제공하는 것이 조금더 직관적이다. 2. 오류 분석에 인간의 직감을 가미해본다. : 가령 음성 인식 알고리즘이 사람이 인식하는 것보다 안좋게 동작한다고 가정해보자. "This re..
예를 들어 100여개의 작은 학습 데이터를 가지고 있다고 가정해보자. 아마 10개의 데이터를 랜덤하게 선택해서 알고리즘을 학습시킬 것이고, 그다음에는 20개, 30개, 최종적으로는 100개까지 10의 단위로 갯수를 증가시키면서 학습을 시킬 것이다. 그러고 난 후에 10개의 데이터를 바탕으로 학습 곡선을 출력할 것이다. 아마 적은 학습 데이터 크기에서는 학습 곡선이 약간 오차가 발생하는 것처럼 보일 것이다.(값이 예상한 것보다는 크거나 작거나 할거란 것이다.) 10개의 데이터를 랜덤하게 뽑아서 학습시키면, 수많은 모호하거나 잘못 라벨링된 데이터와 같이 "나쁜" 학습 데이터를 뽑게 될 수 있다. 아니면, 운이 좋아서 상대적으로 "좋은" 학습 데이터를 뽑을 수 있을 것이다. 적은 학습 데이터를 가지고 있다는 ..
이런 학습 곡선에 대해서 고려해보자. 이 그래프는 high bias일까. high variance일까, 아니면 두 가지 경우가 합쳐진 걸까? 파란색 학습 오류 곡선은 상대적으로 낮고, 빨간색 개발 데이터의 오류 곡선은 파란색 학습 데이터 오류 곡선에 비해서는 더 크다. 그렇기 때문에 bias는 작고, variance는 큰 것이라고 볼수 있다. 여기서 학습 데이터를 조금 더 추가하면 개발 오류와 학습 오류 사이의 갭을 줄이는데 도움이 될 것이다. 그럼 이번에는 이런 경우를 고려해보자. 이번에는 학습 오류는 원하는 목표치에 비하면 더 큰 것을 알 수 있다. 그리고 개발 데이터 오류 또한 학습 데이터 오류에 비해서 더 큰 것을 알 수 있다. 그렇기 때문에 여기선 bias와 variance가 다 큰 것이라고 알..
개발 데이터 오류 곡선이 아래와 같이 생겼다고 해보자: 이전에도 언급했었지만, 만약 개발데이터에 대한 오류 곡선이 위와 같이 안정화되어 있다면, 데이터를 추가해도 원하는 성능을 얻어내기 힘들 것이다. 하지만 빨간색의 개발 데이터 오류 곡선이 최종적으로 어떻게 형성될 지에 대해서는 정확히 알기 어렵다. 만약 개발 데이터가 작다면, 학습 곡선에 대해서 오차가 존재하기 때문에 뭔가 확실성을 갖기 어려울 것이다. 이 그래프에다가 학습데이터 오류 곡선을 추가해보면 아래와 같다. 이제는 데이터를 추가하는 것만으로는 충분하지 않다는 것을 확실히 알 수 있을 것이다. 왜 그럴까? 두가지 시사점에 대해서 기억해보자: - 우리가 학습 데이터를 더 추가해도 학습 오류는 더 심해질 수 있다. 그렇기에 파란색의 학습 오류 곡선..
개발 데이터(그리고 테스트 데이터)의 오류는 학습 데이터량이 증가할수록 감소해야 한다. 하지만 지금 다루고 있는 학습 데이터 상에서의 오류는 학습 데이터 량이 증가해도 보통은 증가할 것이다. 예제와 함께 이런 현상에 대해서 다뤄보고자 한다. 지금 가지고 있는 학습 데이터가 단지 2개의 데이터만 있다고 해보자: 하나는 고양이 그림이고, 다른 하나는 고양이가 아닌 그림이다. 그렇게 되면 학습 데이터 상에서 두가지 케이스에 대해 "기억"시키는 것은 쉬운 일이 될 것이고, 아마 학습 데이터 오류도 0%가 나올 것이다. 학습 데이터에서 하나나 두 개 모두 잘 못 라벨링되어 있다 하더라도, 개발하고 있는 알고리즘이 해당 라벨에 대해서 기억하는 것은 여전히 쉬운 일이 될 것이다. 이제 학습 데이터가 100개정도 된다..
지금까지 오류가 avoidable bias와 variance에 얼마나 영향을 줄 수 있는 평가하는 몇가지 방법에 대해서 알아봤다. 먼저 이상적인 오류율을 측정하고, 학습데이터에 대한 오류율과 개발/테스트 데이터에 대한 오류율을 계산했다. 이런 방법보다 더 유용할 수 있는 방법인 학습 곡선 출력에 대해서 다뤄보고자 한다. 학습 곡선은 보통 학습 데이터 대비 개발 데이터의 오류율을 출력한 형태를 말한다. 이를 출력하기 위해서는 다른 크기의 학습데이터를 사용해서 알고리즘을 돌려봐야 한다. 만약 1000개 정도의 데이터가 있다면, 100개, 200개, 300개, 1000개까지의 데이터에 대해서 각각 알고리즘을 적용해봐야 한다는 것이다. 그러면 학습 데이터 크기별로 개발 데이터의 오류율을 출력할 수 있게 될 것이..
만약 만든 알고리즘이 high variance에 의해서 어려움을 겪고 있다면, 아래의 방법을 고려해봐라: - 학습 데이터를 추가할 것 : 이 방법은 만약 당신이 데이터에 대해서 많이 접근할 수 있고, 이를 처리할 연산 능력이 충분한 한, Variance 문제를 해결할 수 있는 가장 간단하고 신뢰할 만한 방법이다. - 정규화 방법을 적용해볼 것 (L2 regularization, L1 regularization, dropout) : 이 방법은 variance를 줄여주지만, bias를 높이는 부작용이 있다. - Early Stopping을 적용해볼 것 (예를 들어 개발 데이터 오류에 기반해서 gradient descent를 빨리 멈추게 한다던지...) : 이 방법은 variance를 줄여주지만 bias를 높..
개발/테스트 데이터 상에서 잘 동작하기를 기대하기 전에 먼저 학습 데이터 상에서 알고리즘이 잘 동작해야 한다. 이전에 다뤘던 high bias 문제를 해결하는 방법에 덧붙여서, 나는 때때로 eyeball dev set에서 수행하는 오류 평가와 비슷한 형태를 가진 오류 평가를 학습 데이터 상에서도 수행해본다. 만약 지금 사용하고 있는 학습 데이터가 high bias를 가진다면 이런 방법은 유용하게 쓰일 것이다. 예를 들어 만든 알고리즘이 학습 데이터에 맞지 않은 경우 말이다. 예를 들어, 지금 음성 인식 시스템을 만들고 있고, 지원자로부터 학습 데이터로 쓰일 음성 데이터를 모았다고 가정해보자. 만약 지금 만든 시스템이 학습 데이터 상에서 잘 동작하지 않고 있다면, 학습 데이터 상에서 주로 발생하는 오류의 ..
만약 현재 하고 있는 작업이 high avoidable bias에 의해서 어려움을 겪는다면, 아래의 방법들을 시도해보면 좋을것 같다.: - (neuron이나 계층의 갯수 같은) 모델의 크기를 증가시켜라: 이 방법은 bias를 줄여주는데, 이 방법을 통해서 학습 데이터에 더 잘 동작하게 해준다. 만약 이 방식이 variance를 증가시킬 수 있을텐데, 이 때 정규화 방식을 사용하면 variance의 증가를 막을 수 있다. - 오류평가시 얻은 지식을 기반으로 입력 특성을 수정하라: 만약 오류 평가를 통해서 특정 특성을 지닌 오류 카테고리를 제거할 수 있을 법한 기능을 만들어야 되겠다는 생각이 들었을 때를 보자. 이런 기능은 어쩌면 bias와 variance 관점에서 모두 도움이 될 수 있다. 이론적으로 특성..
보통 Bias와 Variance간의 tradeoff 라는 용어를 들어봤을 것이다. 대부분의 학습 알고리즘을 살펴보면 bias 오류를 줄이면 variance에 대한 비용이 증가하거나 반대의 case가 발생하는 경우를 봤을 것이다. 이게 바로 bias와 variance간의 "trade off"를 의미하는 것이다. 예를 들어 신경망의 layer나 neuron을 추가하는 것과 같이 학습 모델의 사이즈를 키우는 것은 일반적으로 bias를 줄이지만, 반대로 variance를 증가시킨다. 다른 방향으로 정규화 특성을 키우게 되면, variance는 감소하지만, bias가 증가하는 형태를 보인다. 요즘에는 매우 큰 신경망에서도 돌릴 수 있을 만큼 데이터가 엄청 많다. 그렇기 때문에 위에서 말한 "trade off"는 ..
bias와 variance 문제를 해결하기 위한 가장 간단한 공식을 살펴보자:- 만약 high avoidable bias가 있다면, 지금 학습하는 모델의 크기를 키워라(예를 들어 학습시키는 신경망에 계층을 추가하거나 뉴런의 갯수를 추가하는 방식으로 사이즈를 키우는 것) - 만약 high variance라면, 학습 데이터를 더 모아라 만약 아무 제한 없이 신경망의 크기를 키울 수 있고, 학습 데이터도 증가시킬 수 있다면, 많은 학습 문제들이 잘 해결될 것이다. 하지만 실전에서는, 모델의 크기를 키우게 되면 결과적으로 연산 문제에 직면하게 되는데, 그 이유는 매우 큰 모델을 학습시키는 작업이 매우 느리기 때문이다. 또한 학습 데이터를 모으는 것도 많이 어려울 것이다.(앞의 예를 가져올때, 인터넷이 연결되어 ..
이전에 다뤘던 고양이 인식 예시에서, "이상적인" 오류율이란 "이상적인" 분류기를 통해서 얻을 수 있는 것, 즉 거의 0%의 오류율을 얻는 것이다. 인간이 거의 고양이가 들어 있는 사진을 잘 인식하는 것과 같이 기계도 동일하게 잘해주길 원한다. 이렇게 인식하는 것이 아닌 다른 문제는 조금 더 어렵다. 예를 들어 음성 인식 시스템을 만들고 있을때, 14% 정도의 음성이 많은 배경 소음을 담고 있던가, 인간이 들어도 제대로 인식하기 힘들만큼 불분명한 것을 알았다. 이런 케이스라면 "이상적인" 음성 인식 시스템은 거의 14%의 오류율을 나타낼 것이다. 해당 음성 인식 문제에서 만든 알고리즘이 다음과 같은 성능을 얻었다고 치자: - 학습 데이터 오류 = 15% - 개발 데이터 오류 = 30% 학습 데이터를 통한..
이전에 다뤘던 고양이 분류기를 보자. (인간과 같은) "이상적인" 분류기는 거의 완벽하게 고양이를 분류할 수 있어야 한다. 만약 개발한 알고리즘이 다음과 같이 동작한다고 보자: - 학습 오류 = 1% - 개발 오류 = 11% 여기엔 어떤 문제가 있을까? 이전 포스트에서 다룬 정의를 적용해보면, bias는 1% 이고, variance는 10%(11% - 1%) 라는 것을 알 수 있다. 결국 이건 high variance 특성을 띈다. 이 분류기는 매우 낮은 학습 오류를 가지지만 개발 데이터를 일반화시키기 어렵다. 이를 보통 overfitting이라고 부른다. 이제 다음과 같은 결과를 보자: - 학습 오류 = 15% - 개발 오류 = 16%이때 bias는 15%, variance는 1%로 계산할 수 있다. ..
- Total
- Today
- Yesterday
- Windows Phone 7
- Python
- 강화학습
- DepthStream
- Kinect for windows
- SketchFlow
- bias
- windows 8
- End-To-End
- Pipeline
- arduino
- 파이썬
- dynamic programming
- 한빛미디어
- Distribution
- Kinect SDK
- RL
- TensorFlow Lite
- Kinect
- processing
- Offline RL
- ColorStream
- PowerPoint
- Gan
- 딥러닝
- reward
- Off-policy
- Variance
- Policy Gradient
- Expression Blend 4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |