인간 vs. 인공지능 - 히든싱어 컨테스트 2 Etc

구글이 알파고 소스코드를 공개했는데 python Keras로 되어 있다고 한다. 

python Keras로 만들었던 히든싱어 시스템에 대해 소개해 볼까 한다.



이 연구를 시작한 배경은 본래 핀테크 인증 기술 개발을 위해 뇌파 인증, 화자 인증, 동적서명인식 등을 연구하며 딥러닝 기술들을 사용해서 기존의 SVM등 보다 훨씬 높은 성능을 거두고 있었다.
지난 겨울방학 때 학부 (공주대학교 의료정보학과) 2학년 학생들과 연구참여 프로젝트를 진행했고, 학생들의 흥미를 고려하여 히든싱어 문제를 풀어보면 재미있을 것 같았다. 그리고 동기 부여를 위해, 인간과의 대결을 목표로 하게 되었다. 
히든싱어는 원가수와 정평이난 모창 가수들이 등장한다. 새로이 데이터를 만드는 것은 거의 불가능하고, 기존에 방송된 프로그램을 이용하기로 했다. 

기존, 히든싱어 프로그램을 들여다 보니, 모창자 5명 (원가수 1명 포함)으로 시작해서 라운드 별로 1명 씩 떨어뜨리는 방식으로 진행되었다. 즉 마지막 라운드에 가서야 가장 유사한 모창자를 고르는 방식이다. 
5명 중 1명 맞추는 것은 찍으면 20%의 정확률이 나온다. 2명 중 1명은 경우 50% 이고.. 해서 어느정도 난이도를 유지하기 위해
5명이 부른 1라운드 음원을 가지고 5명 중의 원가수를 찾는 방식으로 진행했다. 30편의 프로그램으로 부터 테스트셋을 구성하게 되는데. 프로그램 내에서도 패널과 방청객 들이 보팅을 한다. 1라운드에서는 가장 아닌 것 같은 사람을 고르게 되는데, 가장 적은 표를 받은 사람이 원가수였던 경우는 18%에 불과했다. (물론 원가수를 보팅하는 것과 가장 아닌 것 같은 사람을 보팅하는 것은 다른 문제이다)

테스트셋은 원래 원가수의 원곡 음원을 구해 모창이 진행되는 부분을 추출해 학습데이터로 삼았다. 히든 싱어 프로그램에서 추출한 5명의 모창자 들이 부른 음원에서 테스트 문제를 추출하였다. 
그래서 이 문제는 학습데이터가 1개 있고, 5개의 테스트 데이터와 비교하여 가장 유사도가 높은 테스트 데이터를 원가수로 선택하는 문제로 요약 되었다. 

학습과 시험을 위한 처리 흐름은 아래 그림과 같다.   

학습과정(Training Phase)과 테스트과정(Test Phase)으로 구성된다. 학습과정은 다음 단계로 구성된다.

- 음원 추출 : 원가수의 원곡 음원에서 모창음원과 비교할 부분을 추출한다. 이 때 공백을 제거한다. 이때 사용되는 원곡음원은 모창 프로그램에 등장하는 원가수의 것이 아닌 기존에 발표된원곡을 의미한다.  
- 특징 추출 (Feature Extraction) : MFCC기법을 이용하여 각 음원에서 특징값을 추출한다. MFCC는 음성인식과 가수인식에서 많이 사용되 는 특징으로 수십ms 정도의 음성신호에 대한 주파수 대역 별 에너지 값을 의미한다. 따라서,특징 벡터가 추출된다. MFCC를 적용할 때 가수의 성별에 따라 주파수 대역을 다르게 필터링하여 정확도를 향상시킬 수 있다. 
- 정규화 (Normalization) : 특징 벡터가 추출되면 정규화를 수행한다. 각 음원마다 노래음량이 다르기 때문에 정규화가 필요하다. 그런데, 음성인식 분야에서는 일반적으로 사용하는 Cepstral Mean Normalize 기법을 적용하며 이는 MFCC이후 단계에서 이루어진다. Cepstral Mean Normalize 방법은 평균(mean)을 뺀 후 분산(variance)으로 나누는 것이다. 
- 학습 (Train): 정규화된 특징 벡터를 이용해 Auto-encoder를 학습시킨다. Auto-encoder는 신경망의 일종으로 입력값에 따라 출력값을 재생산 할 수 있도록 신경망을 학습시키는 기법이다.
학습데이터가 하나 밖에 없을 때는 유사도 러닝관련해서 regression이나 classification을 사용할 수가 없다. 
그나마 one-class svm 정도가 사용가능했다. 
특히 딥러닝에서 학습데이터가 하나의 클래스 밖에 없을 때 사용할 수 있는 방법이 없었다. 논문은 물론이고, 구글링을 해봐도
2class를 학습시켜야 하고 1class 밖에 없는 경우, 데이터를 변조해 대조군 데이터를 만들라는 얘기 뿐이었다. 
우연히 Auto-encoder의 적용을 고려하게 되었고 그 성능도 one-class svm을 썼을 때보다 훨씬 좋았다. 
Auto-encoder 는 보안 분야의 anomaly detection에서 사용하면 딱인 것 같다.
이상거래 탐지 (FDS)같은 분야는, 이상거래에 대한 학습데이터가 거의 없다. 
따라서 정상거래데이터 만을 학습시키고, 실 테스트 단계에서는 정상치에서 벗어났는지만을 볼 수 밖에없다.

학습은 원가수의 원곡 음원에 대해서만 이뤄진다. 즉, 컴퓨터에게는 원가수의 노래 소리만을 학습시키는 것이다. 학습단계에서는 입력과 출력에 동일한 값을 제공하여 내부 edge의 weight를 학습하게된다.

학습과정을 거친 Auto-encoder를 이용해 모창음원을 입력하여 원가수를 찾는 테스트 과정은 다음과 같다. 
- 음원추출 : 원가수가 포함된 5개의 히든싱어 모창에서 노래 부분을 추출한다. 
- 특징추출 및 정규화 단계는 학습과정과 동일하다. 
- 구분 (Test): 구분 단계에서는 원가수와 모창자를 포함한 총5명의 모창 음원의 특징 벡터를 Auto-encoder에 입력한다. 그러면 Auto-encoder는 출력값을 도출하는데 이 출력값과 입력값의 차이를 계산하는 방법으로 유사도를 구한다. 차이 계산은 Mean Square Error (MSE)를 사용한다. 최종적으로 이 차이가 가장 적은 음원을 원가수의 음원으로 선택하게 된다.

구현은 python Keras 를 이용, <= 알파고가 사용한 언어 및 라이브러리 (구글이 소스 공개했다하여 보니 같은 거네..)
환경은 그냥 PC에 Ubuntu 15.04
다만 비장의 카드로 GPU 3072개를 갖춘 GTX TITAN X  장착
대강 Training에 가수당 몇초 쯤 소요 , 

이렇게 train, test 결과는 30명 중 18명을 맞춘 정확도 60%.. 
컨테스트에 참가한 24명 중 1등의 성적과 똑같았다. 

여기서 추가로 개선시킬 여지가 있는 것 같다. 우선 학습데이터를 원가수의 원곡 뿐 아니라, 원가수의 다른 노래나 음성도 추가로 학습할 수 있을 것이다. 컨테스트의 인간 참가자 들은 원가수의 다른 노래도 많이 들어봤을 것이기 때문이다. 

이 기술을 어디에 쓸 수 있을까?  알파고는 바둑대결을 위해 만들어졌다 .
그래서 히든싱어 프로그램에 나가고 싶다. 인간 패널 들 사이에 인공지능 패널로 참가하여 히든싱어를 찾는 것이다.
틀릴 때도 있고 맞을 때도 있겠지.. 최고로 잘 맞추는 패널이 될 순 있을 것이다. 
이름을 뭐라고 지어야 하나 알파귀?
수사기관에서 그놈목소리 구분에도 쓸 수 있을 것이다. 고도로 훈련해서 모창하는 걸 구분할 수 있으니.. 
한편 화자인증에 용용? <= 원래 화자인증을 개발하다 파생된 연구다.^^
기존에 화자인증에서는 흉내낸 목소리로 테스트한 것을 본 적이 없다. 목소리 흉내가 쉽지는 않으니.. 
모든 바이오 인증에 적용될 수 있다. 
한편, 위에서 언급한 보안 문제 중 Anomaly detection 에는 최고의 솔루션이 될 것이다. 
정상 데이터만 있고, 비정상 상황에 대한 데이터가 없는 문제 들.. 
또한, 과거의 비정상 패턴외에 새로 등장할 비정상 패턴 (신종 악성코드, 신종 침입유형, 신종사기 유형, 신종 공격 유형 등) 은
학습데이터가 있을 수가 없지만, 탐지를 하긴 해야하는 패턴이다. 
이 경우는 정상데이터만을 학습시키고, 여기에서 얼마나 벗어나는지 보는 수 밖에 없다. 
 






 

핑백

  • Something odd : 인간 vs. 인공지능 - 히든싱어 맞추기 컨테스트 2016-03-14 21:32:33 #

    ... 의 정확도를 높이는데 사용할 수 있고, 1 class 의 트레이닝 데이터 만 존재하는 다른 문제에도 적용 가능하다. 좀더 디테일한 시스템 설명은 [여기]로 ... more

  • Something odd : 알파고의 연산 능력 2016-03-14 21:37:00 #

    ... 림은 페이스북이 공개한 딥러닝 컴퓨터 구조이다. 엔비디아 M40 칩을 장착한 테슬라 보드를 8개 꼽을 수 있다. M40 는 코어 3072개로 (내가 히든싱어 문제[링크] 에 사용했던 gpu와 같다!!!), 연산성능은 부동소수점연산 초당 7조번이다. 8개 니까, 56조 개의 연산을 수행할 수 있다. 결론은 단일형 ... more

덧글

  • 감탄 2016/10/23 13:01 # 삭제 답글

    데이터사이언스 공부를 시작한지 얼마 안된 백수입니다. 감탄스럽습니다.. 흔하지 않은 주제로 분석을 해보려고 하는데 주제가 잘 잡히지 않아서 골머리를 썩고 있었습니다. 아직 SVM은 잘 모르고 auto encoder나 음원분석에 대해서는 전혀 몰라서 비슷하게 응용을 해보지는 못할 것 같으나... 정말 큰 영감을 얻어 갑니다. 감사합니다.
댓글 입력 영역