티스토리 뷰
다루고 있는 음성 인식 시스템이 차안에서 발생한 음성 데이터에 대해서 더 많이 필요로 한다. 운전중에 많은 데이터를 수집하는 것보다는 더 쉬운 방법이 있다. 바로 주어진 데이터를 인위적으로 합성하는 것이다.
만약 차 소음이나 거리 소음에 대한 음성 데이터를 많이 가지고 있다고 가정해보자. 몇몇 사이트에선 그 데이터를 다운로드 받을 수 있다. 그리고 조용방에서 사람들이 이야기하는 학습 데이터도 많이 가지고 있다고 가정해보자. 만약 사람이 대화하는 음성 데이터에다 차/거리 소음 데이터를 "추가"한다면, 시끄러운 차 안에서 사람이 대화하는 것에 대한 음성 데이터를 얻을 수 있을 것이다. 이런 과정을 사용해서 우리는 해당 데이터들을 마치 차안에서 얻은 데이터인 것처럼 "합성"(synthesize)시킬 수 있다.
조금더 일반적으로 말해서, 이런 식의 인위적 데이터 합성을 통해 개발 데이터와 합리적으로 맞는 많은 데이터를 생성할 수 있는 환경이 몇몇 있다. 한번 이전에 다뤘던 고양이 이미지 분별기를 두번째 예로 들어보겠다. 이미 사전에 개발 데이터의 이미지는 모바일 폰으로부터 왔기 때문에 조금더 motion blur가 가해져 있는 것을 알고 있다. 그럼 인터넷 이미지로 구성된 학습 데이터에서 blur가 되지 않은 이미지를 가져다가 임의의 motion blur를 처리하면, 개발 데이터에 유사한 데이터를 만들어 낼 수 있다.
이런 인위적 데이터 합성도 나름의 유의점이 있음을 인지해야 한다: 때때로는 사람에 의해서 실제성을 나타내게끔 데이터를 합성하는 것이 컴퓨터에 의해서 실제성을 부여하는 것보다 쉬울 수 있다. 예를 들어 만약 1000 시간에 달하는 음성 학습 데이터가 있는데 차 소음 데이터는 1시간 분량만 있다. 만약 1000시간의 음성 데이터에서 같은 1시간의 차 소음 데이터를 반복적으로 다른 비율로 사용하게 되면, 합성된 데이터 내에서 같은 차 소음이 반복적으로 포함될 것이다. 이렇게 되면 학습 알고리즘이 1시간의 차 소음에 대해서 "overfit"될 것이다. 그렇게 되면, 차 소음이 다르게 나오는 새로운 음성에 대해서는 일반화가 잘 되지 않을것이다.
다른 방법으로 1000시간 정도의 각각 다른 차 소음 데이터가 있지만, 이게 단지 10개의 차에서만 뽑아낸거라고 가정해보자. 이 경우 알고리즘은 해당 10개의 차 소음에 대해서 "overfit"되어 다른 차에서 나온 소리에서 테스트했을 때는 나쁘게 동작할 것이다. 어쩔 수 없지만, 이런 문제는 탐지하기가 어렵다.
한가지 예를 더 들자면, 만약 차를 인식하는 컴퓨터 영상 시스템을 만들고 있다고 가정해보자. 그리고 비디오 게임 업체에서 일하는 파트너가 여러 차 모델에 대한 그래픽 모델을 가지고 있다고 가정해보자. 알고리즘을 학습하기 위해, 이 모델을 활용해서 여러 차에 대한 합성 이미지를 생성할 것이다. 비론 합성된 이미지가 실제와 유사해 보일지 몰라도, 이런 접근 방식은(많은 사람들이 제안했던 방식이기도 하다) 잘 동작하지 않을 것이다. 비디오 게임 상에서는 전체 게임 내에서 20개 미만의 차 디자인을 가질 것이다. 차에 대한 3D 모델을 만드는 것이 매우 비싸기도 하고, 아마 게임을 하는 동안에도 계속 같은 차들이 돌아다닌 것을 인지 하지 못할 것이다. 그렇더라도 색깔만 다르게 나올 것이다. 이런 데이터와 실제 도로상의 차 데이터와 비교했을 때 - 결국 개발/테스트 데이터를 들여다 보게 되는 것이다- 위와 같은 20개의 합성된 차의 이미지는 실제 세계의 차량 분포를 축소화 시킨 것에 불과하다. 결국 20개의 차 모델로부터 100000개의 학습 데이터를 뽑아내게 되면, 영상처리 시스템은 20개의 차 모델에 "overfit" 될 것이고, 다른 차 모델이 포함된 개발/테스트 데이터에 일반화하기 어려울 것이다.
데이터를 합성할 때에는 실제 데이터에서 정말로 합성하길 원하는지 여부를 고려해봐야 한다. 주어진 합성된 데이터 특성을 통해서 학습 알고리즘이 잘 합성된 데이터에서부터 합성되지 않은 데이터에 이르기까지 전 데이터에 잘 동작할 거라는 생각을 버려야 한다. 예를 들어 합성된 데이터가 20개의 차 모델 중 하나로부터 나온다던가, 아니면 합성된 음성 데이터가 1시간의 차 소음 데이터에서만 나온다던지 말이다. 이런 조언은 조금 따라가기 어려울 것이다.
데이터 합성 작업을 수행할 때, 우리 팀은 뭔가 유의미한 효과를 가지기 위해 실제 데이터 분포와 거의 유사한 데이터를 생성하는데 수 주를 사용했다. 하지만 이런 세부사항에 대해서 맞게 접근할 수 있다면, 이전보다 훨씬 많은 학습 데이터를 확보할 수 있을 것이다.
< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 43. Artificial data synthesis를 번역한 내용입니다.>
'Study > AI' 카테고리의 다른 글
[MLY] 강화학습 예제 (0) | 2018.10.10 |
---|---|
[MLY] 최적화 검증 테스트의 일반적인 형태 (0) | 2018.10.10 |
[MLY] 최적화 검증 테스트 (0) | 2018.10.09 |
[MLY] 데이터 불일치 해결하기 (0) | 2018.10.05 |
[MLY] Bias, Variance, Data mismatch 오류 확인하기 (0) | 2018.10.05 |
[MLY] 학습 데이터부터 개발 데이터까지 일반화하는 방법 (0) | 2018.10.03 |
[MLY] 데이터에 가중치 부여하기 (0) | 2018.10.03 |
- Total
- Today
- Yesterday
- 강화학습
- ai
- 파이썬
- dynamic programming
- ColorStream
- TensorFlow Lite
- Offline RL
- processing
- 딥러닝
- End-To-End
- arduino
- RL
- DepthStream
- Policy Gradient
- PowerPoint
- Kinect SDK
- bias
- reward
- Gan
- Distribution
- Kinect
- Pipeline
- Off-policy
- Kinect for windows
- Expression Blend 4
- windows 8
- Variance
- 한빛미디어
- Windows Phone 7
- SketchFlow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |