[Ⅲ. Structuring Machine Learning Projects] Mismatched Training and Dev/Test Set (3)
Structuring Machine Learning Projects
Mismatched Training and Dev/Test Set
Addressing Data Mismatch
만약 학습 세트가 개발/시험 세트와 다른 분포를 갖는다면 또 오류 분석에서 데이터 불일치 문제가 드러난다면 어떻게 해야 할까요? 이에 대한 완전히 체계적인 해법이 있지만 시도해 볼 수 있는 방법들을 살펴보겠습니다.
큰 데이터 불일치 문제가 발생하는 경우 저는 주로 수동 오류 분석을 수행하고 훈련 세트와 개발/시험 세트의 차이를 이해하려고 노력합니다. 기술적으로 오류 분석을 위해 시험 세트 과적합을 방지하려면 시험 세트가 아니라 개발 세트를 살펴봐야 합니다.
구체적인 예로 음성 작동 백미러 응용 프로그램을 구축하고 있다면 개발 세트가 훈련 세트와 어떻게 다른지 확인하기 위해 개발 세트의 예시를 보실 아니, 이 경우 들으실 겁니다.
예를 들어 많은 개발 세트 예시에서 노이즈가 아주 심하고 그 중에서도 자동차 소음이 심하다는 것을 발견하실 수 있습니다. 이는 개발 세트와 훈련 세트의 차이 중 하나입니다.
또 다른 범주의 오류도 발견할 수 있습니다. 예를 들어 차 안에 있는 음성 작동 백미러가 가끔 도로 번호를 잘못 인식할 수 있습니다. 도로 주소가 담긴 수많은 네비게이셔널 쿼리가 있기 때문이죠. 따라서 도로 번호를 잘 인식하는 것은 정말 중요합니다. 개발 세트 오류의 특성을 파악할 수 있다면 아니면 개발 세트가 훈련 세트와 어떻게 다른지 혹은 얼마나 더 어려운지를 파악할 수 있다면 나중에 훈련 데이터를 더 유사하게 만들 수 있는 방법을 찾아볼 수 있습니다.
아니면 개발/시험 세트와 비슷한 데이터를 더 수집해 볼 수 있습니다. 예를 들어, 뒤에서 들리는 자동차 소음이 주된 오류원이라는 것을 알게 되면 시끄러운 차내 데이터를 시뮬레이션해 볼 수 있습니다.
다음 그림에서 이 작업을 어떻게 하는지 좀더 알아보겠습니다. 사람들이 숫자를 말하는 음성 데이터를 더 많이 얻어 이를 훈련 세트에 추가할 수 있습니다. 위 그림에는 무엇을 시도해 볼 수 있는가에 대한 지침이 나와 있는데요. 이는 체계적인 프로세스가 아니며 발전에 필요한 통찰력을 준다는 보장도 없습니다.
하지만 이런 수동적 통찰력으로 데이터를 중요한 차원에서 더 비슷하게 만드는 것이 종종 많은 문제들을 해결하는 데 도움을 준다고 생각합니다. 그럼 어떻게 훈련 데이터를 개발 세트와 더 비슷하게 만들 수 있을까요?
이 때 사용할 수 있는 한 가지 기술은 인공 데이터 통합인데요 이를 자동차 소음 문제를 해결하는 맥락에서 논의해 보겠습니다.
음성 인식 시스템을 구축하려고 하는데 자동차의 배경 소음 고속도로의 배경 소음 등으로 실제로 차 안에서 녹음된 오디오가 많지 않을 수 있습니다. 하지만 이것을 합성할 방법이 있다는 것이 밝혀졌습니다. 이제 차 배경 소음 없이 깨끗한 오디오를 녹음했다고 가정해 보겠습니다.
여기 훈련 세트에 있을 수 있는 오디오 예시가 있습니다. 이 문장은 A부터 Z까지의 모든 알파벳을 포함하면서도 짧기 때문에 AI에서 시험용으로 많이 사용되어 자주 보이는 문장입니다.
이 문장을 녹음할 때 이처럼 자동차 소음도 녹음될 수 있습니다. 아무 말도 하지 않고 운전한다면 차 안에서는 이런 소리가 들리겠죠. 이 두 오디오 클립을 합친다면 저 문장이 시끄러운 차 속에서 어떻게 들릴지 합성할 수 있습니다.
자, 이렇게 들립니다 이것은 상대적으로 간단한 음성 합성의 예입니다. 목소리가 자동차 벽에 튕겨 나오는 듯한 반향과 같이 다른 오디오 효과를 합성할 수도 있습니다. 하지만 인공 데이터 합성을 통해 밖에 나가 엄청난 양의 데이터를 모을 필요 없이 실제로 달리는 차 안에서 수집한 데이터 수천 수만 시간을 모을 필요 없이 차 안에서 녹음한 것처럼 들리는 데이터를 더 많이 빠르게 찾을 수 있습니다.
따라서 오류 분석 결과 데이터가 더 차 안에서 녹음된 것처럼 들려야 한다고 판명되면 이 방법은 이러한 유형의 데이터를 합성해 학습 알고리즘을 제공하는 합리적인 방법이 될 수 있습니다.
여기서 인공 데이터 합성과 관련해 주의할 점이 있는데요 예를 들어, 만 시간 동안 조용한 배경에서 녹음된 데이터가 있다고 해 봅시다. 그리고 한 시간짜리 자동차 소음 데이터가 있다고 해 봅시다.
한가지 시도해 볼 만한 것은 이 한 시간짜리 자동차 소음을 만 번 반복해 조용한 환경에서 녹음된 만 시간짜리 데이터에 추가하는 것입니다. 그 소리는 인간의 귀에 완벽하게 들릴 것입니다. 하지만 이 경우 학습 알고리즘이 한 시간짜리 차량 소음에 과적합할 위험이 있습니다.
그리고 특히 만약 이만큼이 차 안에서 녹음할 수 있는 모든 소리라고 하면 상상할 수 있는 모든 차 배경 소음이 이만큼이라면 한 시간짜리 차 배경 소음만 가지고 있을 경우 이 전체 집합의 아주 작은 부분만 시뮬레이션하고 있을 수 있습니다. 즉 전체의 아주 작은 부분만 합성하고 있는 것일 수 있습니다. 그리고 인간 귀에는 한 시간짜리나 몇 시간짜리나 똑같기 때문에 이 모든 소리가 괜찮게 들립니다.
하지만 전체의 아주 일부분에서 데이터를 합성하고 있는 것일 수 있으며 신경망이 여러분이 보유한 한 시간짜리 차 소음에 과적합되고 있을 수 있습니다. 한 시간짜리 차 소음을 반복하지 않고 독특한 차 소음 만 시간을 조용한 배경의 만 시간짜리 오디오 녹음에 더하기 위해 자동차 소음 만 시간을 저렴하게 수집하는 게 현실적으로 가능한지는 모르겠지만 한 시간이 아니라 만 시간짜리 독특한 차 소음을 사용하면 학습 알고리즘 성능이 더 좋게 나올 수 있습니다. 가능하다면 말이죠.
인공 데이터를 합성할 때 문제는 인간 귀에는 이 만 시간이 한 시간과 똑같이 들린다는 겁니다. 어쩌면 여러분도 모르는 사이 작은 하위 집합에서 아주 낮은 품질의 합성 데이터 세트를 생성하게 될지 모릅니다.
여기 인공 데이터 합성의 또 다른 예시가 있습니다. 자율 주행차를 만드는 중 이런 차량을 감지해 여기에 바운딩 박스를 둘러 놓고 싶다고 합시다. 많은 사람들이 논의해 온 아이디어 중 하나는 자동차 이미지를 시뮬레이션하는 데 왜 컴퓨터 그래픽을 써야 하는가입니다.
여기 컴퓨터 그래픽으로 만들어진 자동차 사진들이 두 장 있습니다. 사실 이런 그래픽 효과는 꽤 좋다고 생각합니다. 그리고 이런 사진들을 합성해서 차량 감지를 위한 꽤 좋은 컴퓨터 비전 시스템을 훈련할 수 있다고도 생각합니다. 안타깝게도 제가 이전에 사용한 사진들은 모두 이 설정에 적용됩니다.
여기 모든 자동차를 포괄한 집합이 있다고 하면 이 차 중 극히 일부를 합성한다면 인간 눈에는 어쩌면 합성된 이미지가 좋아보일지도 모릅니다. 하지만 합성중인 작은 하위 집합에 과적합될 수 있겠죠. 특히 많은 사람들이 독립적으로 이런 아이디어를 내놓았는데요. 좋은 자동차 컴퓨터 그래픽이 있는 비디오 게임을 찾아 여기에서 이미지를 가져와 많은 자동차 사진 데이터 세트를 얻을 경우 비디오 게임에 자동차 종류가 20개만 있어도 게임이 괜찮아 보입니다.
비디오 게임 내에서 주행하면서 다른 20가지 차를 보면 꽤 사실적인 시뮬레이션처럼 보이기 때문입니다. 그러나 세상에는 20가지가 넘는 고유한 자동차 디자인이 있으며 전체 합성 훈련 세트에 차 종류가 20개만 있다면 신경망은 이 20대의 자동차에 과적합될 것입니다. 그리고 이 이미지가 사실적으로 보인다 해도 전체 자동차 세트 중 아주 일부를 다루고 있다는 것을 인간이 쉽게 알아채기 쉽지 않습니다.
요약하면, 데이터 불일치 문제가 있다고 생각될 경우 오류 분석을 할 것을 권합니다. 훈련 세트나 개발 세트를 보고 이 데이터 분포가 어떻게 다를 수 있는지에 대한 통찰력을 얻어 보세요.
그런 다음 개발 세트와 더 비슷해 보이는 훈련 데이터를 더 많이 얻을 수 있는 방법을 찾아봅니다. 우리가 논의한 방법 중 하나는 인공 데이터 합성인데요. 인공 데이터 합성은 실제로 효과가 있습니다.
저는 음성 인식에서 인공 데이터 합성이 이미 아주 우수한 음성 인식 시스템의 성능을 크게 향상시키는 것을 보았습니다. 이렇게 인공 데이터 합성은 아주 효과적일 수 있습니다.
한편 인공 데이터 합성을 사용할 때에는 데이터를 전체 예시 집합의 극히 일부분에서 시뮬레이션하고 있지는 않은지 주의하세요. 지금까지 데이터 불일치 처리 방법이었습니다. 다음으로 여러 유형의 데이터에서 동시에 학습하는 방법에 대해 설명드리려 합니다.
댓글남기기