이런 경우에는 최적화 검증 테스트를 적용해볼 수 있다. 만약 주어진 입력 x에 대해서, 출력 y를 얼마나 잘 얻을 수 있는지 점수 Scorex(y)를 계산할 수 있을 수 있을 때 말이다. 더불어 argmaxyScorex(y)를 찾는 근사 알고리즘을 사용하는데 종종 최대치를 찾는데 실패하는 검색 알고리즘을 의심해볼 때도 사용해볼 수 있다. 이전 음성 인식 예제를 가져와보면 x=A는 음성 데이터 일 것이고, y=S는 출력 번역본일 것이다. y*가 "올바른" 출력인데, 알고리즘은 y_out 결과를 내뱉었다고 가정해보자. 그러면 이를 확인해볼 방법은 $$Score_{x}(y*) > Score_{x}(y_{out})$$여부를 확인하는 것이다. 만약 위의 수식이 참이라면, 최적화 알고리즘 문제로 판명할 것이다. 이..
음성 인식 시스템을 만들고 있다고 가정해보자. 해당 시스템은 음성 파일 A를 입력으로 넣어줘서 동작하고, 각 출력 문장 S에 대한 점수(Score_A(S))를 계산한다. 예를 들어 $$ Score_{A}(S) = P(S|A)$$ 를 계산할텐데, 이 값은 주어진 입력 음성이 A일 때 적절한 출력 문장으로 문장 S가 나올 확률을 나타내는 것이다. Score(S)를 계산하는 방법으로, 해당 값을 최대로 극대화할 수 있는 영어 문장 S를 찾아야 하고 수식으로는 다음과 같다. $$Output = arg \max_{S}Score_{A}(S)$$ 여기서 "argmax"는 어떻게 계산해야 할까? 만약 영어가 50000개의 단어로 구성되어 있다면, N개의 길이로 구성되어 있는 문장은 (50000)^N 정도가 된다.(약간..
다루고 있는 음성 인식 시스템이 차안에서 발생한 음성 데이터에 대해서 더 많이 필요로 한다. 운전중에 많은 데이터를 수집하는 것보다는 더 쉬운 방법이 있다. 바로 주어진 데이터를 인위적으로 합성하는 것이다. 만약 차 소음이나 거리 소음에 대한 음성 데이터를 많이 가지고 있다고 가정해보자. 몇몇 사이트에선 그 데이터를 다운로드 받을 수 있다. 그리고 조용방에서 사람들이 이야기하는 학습 데이터도 많이 가지고 있다고 가정해보자. 만약 사람이 대화하는 음성 데이터에다 차/거리 소음 데이터를 "추가"한다면, 시끄러운 차 안에서 사람이 대화하는 것에 대한 음성 데이터를 얻을 수 있을 것이다. 이런 과정을 사용해서 우리는 해당 데이터들을 마치 차안에서 얻은 데이터인 것처럼 "합성"(synthesize)시킬 수 있다...
음성 인식 시스템을 개발하고 있는데, 학습 데이터나 학습 개발 데이터 상에서는 잘 동작하는데, 개발 데이터 상에서는 잘 동작하지 않는다고 가정해보자. 그러면 데이터 불일치(data mismatch) 현상이 있는 것인데, 이 때 어떻게 해야 할까? 본인이 추천하는 방법은: 1) 학습 데이터와 개발 데이터 사이에 어떤 데이터 특성이 다른지를 이해할 것2) 알고리즘 상에서 문제가 발생하는 개발 데이터에 조금 더 적합한 학습 데이터를 조금 더 수집할 것 예를 들어, 음성 인식의 개발 데이터에서 오류 평가를 수행하고 있다고 가정해보자: 아마 처음에는 100개의 데이터에 대해서 일일이 평가를 수행할 것이고, 알고리즘이 어디서 문제가 생기는지를 이해하려고 할 것이다. 아마 개발 데이터에 포함되어 있는 대부분의 음성 ..
만약 고양이를 인식하는 작업에서 인간이 거의 완벽에 가까운 성능(0%대의 오류)를 보여줬고, 이상적인 오류율도 0%이다. 지금 상태에서 당신이 가지고 있는 지표가 다음과 같다고 가정해보자: - 학습 데이터 상에서의 1%의 오류 - 학습 개발 데이터 상에서의 5%의 오류 - 개발 데이터 상에서의 5%의 오류 이 결과가 무엇을 의미할까? 여기서는 high variance를 가지고 있는 것을 알 것이다. 앞에서 소개한 variance를 제거하는 방법을 사용하면, 성능이 좋아질 것이다. 이제 알고리즘이 다음의 지표를 가진다고 가정해보자: - 학습 데이터 상에서의 10%의 오류 - 학습 개발 데이터 상에서의 11% 오류 - 개발 데이터 상에서의 12% 오류이건 학습 데이터 상에 높은 avoidable bias가 ..
만약 학습 데이터와 개발/테스트 데이터의 분포가 다른 상태에서 머신러닝을 적용한다고 가정해보자. 앞에서 다룬대로 하면 학습 데이터는 인터넷 이미지와 모바일 이미지를 포함한 것이고, 개발/테스트 데이터는 모바일 이미지만 포함한 것이다. 하지만 알고리즘은 잘 동작하지 않을 텐데, 아마 생각한 것보다 개발/테스트 데이터 오류가 많이 발생해서 일 것이다. 이렇게 잘 못되는 몇가지 가능성들이 있다: 1. 학습 데이터 상에서는 잘 동작하지 않는다. 이 문제는 아마 학습 데이터 분포상의 high (avoidance) bias가 발생한 것이다. 2. 학습 데이터 상에서는 잘 동작하는데, 학습 데이터와 같은 분포로부터 나온 미지의 데이터 상에서는 일반화가 잘 되지 않는 현상이 있을 수 있다. 이 건 high varian..
만약 200000개의 이미지를 인터넷으로부터 받고, 5000개의 이미지를 모바일 앱 유저로부터 받았다고 가정해보자. 데이터 사이즈 비율은 40:1 정도가 된다. 이론적으로는 충분히 큰 신경망을 만들고 205000개의 이미지를 충분히 학습시켰다면, 인터넷 이미지와 모바일 이미지 상에서 잘 동작하는 알고리즘을 만드는데 지장이 없다. 그러나 실전에서 모바일 이미지보다 인터넷 이미지가 40배 정도 더 많은 것은 단순히 5000개의 이미지만을 가지고 학습하는 것에 비하여 두 모델을 학습하는데 있어 40배(나 그 이상의) 연산 리소스를 사용해야 하는 것을 의미한다. 만약 그걸 감당할 만큼 충분한 연산 리소스가 없다면, 인터넷 이미지의 비율을 타협할 수 있을 만큼 낮춰야 한다.예를 들어 최적화를 하는 데 있어서 sq..
만약 뉴욕시의 집 값을 예측하는 것을 학습시키고 싶다고 가정하자, 집의 크기(입력값 x)가 주어지면, 이를 바탕으로 집 가격(출력값 y)을 예측하길 원할 것이다. 뉴욕시의 집값은 매우 높다. 만약 미시건주의 디트로이트시의 집 값에 대한 정보를 가지고 있는데, 해당 집 값은 뉴욕시의 집값보다 더 낮다고 가정해보자. 이 데이터를 학습 데이터로 포함시킬 수 있을까? 같은 크기의 x가 주어졌을 때, 집 값 y는 해당 집이 뉴욕시에 있냐, 디트로이트시에 있냐에 따라서 매우 다르게 나올 수 있다. 만약 뉴욕시의 집값을 예측하는 것에 대해서만 신경써야 한다면, 위와 같이 두개의 데이터를 사용하게 되면 성능이 안 좋아질 것이다. 이런 경우에는 모순된 디트로이트시의 데이터는 빼버리는 것이 더 낫다. 위와 같은 뉴욕시와 ..
만약 이전과 같이 당신이 만든 고양이 감별기의 학습 데이터로써 10000개 정도의 유저가 업로드한 이미지를 포함하고 있다고 가정하자. 이 데이터는 별도로 분리된 개발/테스트 데이터와 같이 같은 분포를 띄고 있으며, 잘 동작하는 여부를 결정하는 분포를 나타내고 있다. 추가로 인터넷으로부터 다운로드받은 20000개 이미지가 있다. 그러면 알고리즘에 대한 학습 데이터로 20000+10000=30000개의 이미지를 모두 사용해야 할까, 아니면 알고리즘에 외부 영향을 주는 것을 막기 위해 20000개의 인터넷 이미지는 배제하는 것이 좋을까? (간단한 linear classifier로 구성된, 손으로 직접 만든 영상 처리와 같은) 초창기에 나왔던 학습 알고리즘을 쓸 때에는 이렇게 다른 데이터를 합쳐서 사용할 경우 ..
이전에 만든 고양이 분별기를 사용하는 유저들이 10000개 정도의 이미지를 업로드했고, 당신이 각 이미지들이 고양이가 포함되어 있는지 아닌지를 일일이 구별했다고 해보자. 또한 인터넷으로부터 다운로드 받은 이미지가 200000개 정도 있다고 해보자. 이때 학습 데이터와 개발 데이터, 테스트 데이터는 어떻게 정의할 수 있을까? 유저가 올린 10000개의 이미지가 실제로는 분별기가 잘 동작했는지를 나타내는 데이터의 분포를 나타내고 있으므로 아마 이 데이터들을 개발 데이터와 테스트 데이터로 활용할 것이다. 만약 데이터가 아주 많이 필요로 하는(data-hungry) 딥러닝 알고리즘을 학습시킨다면, 200000개의 인터넷 이미지들을 학습하는데 추가로 필요할 것이다. 이러면 학습 데이터와 개발/테스트 데이터는 각각..
지금 음성 인식 시스템을 만들고 있고, 데이터로써 오디오 클립을 가지고 있다. 만약 지금 데이터가 잡음이 많아서 인간도 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가 다 큰 것이라고 알..
- Total
- Today
- Yesterday
- Kinect for windows
- TensorFlow Lite
- Kinect
- Python
- End-To-End
- dynamic programming
- reward
- Distribution
- Off-policy
- Policy Gradient
- bias
- Windows Phone 7
- Pipeline
- DepthStream
- Variance
- Offline RL
- windows 8
- SketchFlow
- 딥러닝
- Kinect SDK
- 파이썬
- Gan
- 강화학습
- PowerPoint
- processing
- Expression Blend 4
- RL
- 한빛미디어
- ColorStream
- arduino
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |