Monday, December 10, 2018

SANE 2018 발표 영상 공개

10월에 보스턴에서 열렸던 SANE 워크샵 영상 8개가 유튜브를 통해 공개됐습니다. 


  • 구글의 멀티모달 음성분리인 Tali Dekel - Looking to Listen: Audio-Visual Speech Separation




  • 구글의 Text-to-speech 시스템인 타코트론 등을 소개하는 Yu Zhang - Towards End-to-end Speech Synthesis 





  • 음성인식 대회인 CHiME의 역사를 통해 배우는 음성인식 성능의 역사 Jon Barker - Distant microphone conversational ASR in domestic environments 











Sunday, September 30, 2018

ISMIR 2018 논문 소개 [3/3]



차례

ISMIR 2018 논문 소개 [1/3]
ISMIR 2018 논문 소개 [2/3]
ISMIR 2018 논문 소개 [3/3] (이 게시물)


이번 글에서는 Late-Breaking/Demo 세션을 보겠습니다. 이 세션은 6+n페이지고 피어리뷰를 받는 정규 세션과는 다른 워크샵 트랙이라고 보시면 됩니다. 분량은 2페이지이고 MIR과 관련된 것이라면 실험이 진행중인 내용이나 데모 등 무엇이든 편하게 낼 수 있는 세션입니다.

LDB submissions

인공 와우(cochlear)는 음성 인식을 목적으로 하고 신체에 장착해야하므로 효율이 매우 중요합니다. 따라서 복잡한 연산이 어렵고 대략 수십 채널정도의 주파수 해상도를 갖고있습니다. 여기에서는 인공 와우를 장착한 사람들이 음악을 들을 때 어떤 요소를 중요시하는지 알기위해 인공 와우를 모사한 시스템을 통과한 음악을 들려주며 선호도를 AB 테스트로 조사했습니다.

그 결과가 그림 1입니다. 사람들은..
- 아는 노래 > 모르는 노래
- 정상 음질 > 떨어지는 음질

그리고..
- 모르는 노래, 정상 음질 > 아는 노래, 떨어지는 음질

이 이 실험의 제일 큰 수확이겠네요.

너무 간단한 결과지만 '아는 노래'로 널리 알려진 곡을 고르다보면 인기가 높은 곡이 나와서 애당초 '아는 노래'와 '모르는 노래'에 편향이 있을 수 있는데 (예를들어 '아는 노래' 집합의 노래 자체가 '모르는 노래'보다 더 사람들이 좋아할만한 노래라든지..) 이런걸 잘 걸러내고 실험한것 같았습니다.


피아노 악보에 있는 운지를 생성하는 파이썬 라이브러리입니다. 깃헙 코드 참고.

조만간 풀페이퍼로 나올것같은 완성도의 초록입니다. 흔히 악기의 음표 하나의 오디오 신호를  ADSR(attack - decay - sustain - release)의 인벨롭으로 해석합니다. 여기에서는 이를 HMM으로 모델링해서 채보에 이용했는데 매우 직관적이고 합리적인 방법으로 보입니다.

WaveGAN 등 좋은 연구를 많이 하고있는 Chris Donahue의 쩌는 데모입니다. 온라인에서 직접 보시죠.

요약하면, 단선율의 피아노 멜로디에서 다음에 나올 확률이 높은 노트 8개를 (RNN encoder로) 선정해서 8개의 키보드에 맵핑하고 이를 보여주는 방식입니다.

2페이지 워크샵 페이퍼에 수식이 15개라니..




Tonnetz는 음악에서 서로 다른 음표의 상대적인 관계를 시각화하는 방법입니다. 이 설명도 좋네요. Tonnetz를 이용하면 각 관계가 '그림'으로 나오는데 이 그림이 key-invariant, pitch-invariant등의 장점을 갖고있습니다. 이 초록에서는 이를 좀 더 발전시켰는데 제가 깊게 이해하진 못했습니다.

----

이상으로 ISMIR 2018 논문 소개를 마칩니다. 

ISMIR 2018 논문 소개 [2/3]


차례

ISMIR 2018 논문 소개 [1/3]

이어서 논문을 열심히 읽어보도록 합시다!

Papers

frame단위로 뭔가를 분류/예측/탐지하는 MIR문제가 많이 있습니다. 예를 들면 보컬 유무 탐지나 마디의 경계선을 찾는 다운비트 탐지같은 문제가 여기에 해당합니다. 이를 딥러닝 혹은 로지스틱 회귀 등으로 해결하려면 출력값에 Sigmoid를 적용해주고 이를 0.5를 기준으로 반올림하는 식의 방법을 많이 사용합니다.

그러나 상황에 따라서 0.5 미만의 값임에도 주변보다 값이 확연히 큰 피크에 해당한다면 "Positive"로 보는게 맞을때가 많이 있습니다. 이런 경우에 주변 값의 평균과 최대값 등을 비교하여 피크를 찾는 방법이 널리 쓰입니다. 본문의 식 1-3이 여기에 해당하고 Librosa의 peak_pick도 같은 원리입니다.

한편 이런 SGD기반의 최적화는 대체로 프레임단위로 ground truth가 존재하고 각 프레임마다 loss를 구하는 것이 보통입니다. 이 논문은, peak picking에서 주변 프레임과 비교를 통해 지역 극대값을 찾는다면 loss도 주변 프레임까지 고려해야 한다는 가설로 시작합니다. 즉 ground truth에 존재하는 지역 극대값을 예측모델이 따라갈 수 있도록 하자는 의미입니다.

그런데 여기에서 제안한 방법은 아무리 봐도 좀 의아하네요. 요약하면 $t=t_0$의 loss뿐만 아니라 주변의 loss까지 포함하자는 이야기인데, 어차피 전체 신호를 프레임으로 나누고 각 프레임에서 loss를 구한 뒤에 그걸 다 더하는 식으로 (=이 논문에서 식(4)에 나온대로) loss를 구하기 때문에 결과적으로 동일한것이 아닌지.. 

그리고 식(11)은 cross-entropy의 두 항에 가중치를 준 식인데 같이 나온 설명은 물론 틀린말이 아니지만.. 그림 4, 5를 보면 $\phi$가 1에 가까울수록 F-measure로 더 높은 숫자가 나오는데요, 이에 대해 본문에서는 아래와 같이 복잡한 해석과 추정을 합니다.

"For any values less than one, there is a dramatic decrease in performance which suggests that the false negative suppression half of the WCE function has a negative effect on performance. This is possibly due to the extremely high value given to flat parts of the activation function (see Figure 2), causing these parts of the activation function to become noisy. This suggests that the improvement is due to the false positive suppression half of the WMD system. As this alone achieves higher F-measures than the other proposed cost functions, then it also suggests that their improvement is also due to the suppression of false positives."

그런데 훨씬 직관적인 설명이 있습니다. 
- $\phi$ 가 작아질수록 (예: 0이면) target이 1일때의 loss를 크게 보므로 false negative를 줄입니다. 물론 반대로 $\phi$가 클수록 false positive를 줄이구요. 
- 여기에서 다룬 드럼 채보같은 문제는 라벨의 밸런스가 전혀 맞지 않습니다. 대부분의 프레임에서 아무 일도 없고 (target이 0) 어쩌다가 한번씩만 target=1이 되니까요. 
-- 그리고 이런 데이터 분포를 따라서 학습이 진행되기 때문에 뉴럴넷은 negative (target=0)를 훨씬 더 많이 예측합니다. 타겟의 대부분이 0이니까요. 
- 그런데 F-measure는 false negative와 false positive에 동일한 가중치를 주는 평가지표에요 (precision과 recall의 조화평균).  다시말해 데이터 포인트로는 몇개 없는 target=1들의 에러인 false negative에 훨씬 큰 가중치를 주고 전체 성능을 평가하는 셈이죠.
- 그러므로 학습을 진행할 때 $\phi=1$에 가까우면, 즉 false negative의 데이터 샘플에서 훨씬 큰 gradient를 받아오도록 해버리면 (<--> target=1인 데이터 샘플에 더 큰 가중치를 주면), F-measure 측정시 더 유리한 점수를 받습니다.

저자가 트잉여가 아니라 물어보긴 귀찮지만 아무래도 제 설명이 맞지않나싶습니다. 그리고 이 문제는 데이터에 가중치를 줘서 밸런스를 맞춰주면 바로 확인해볼 수 있고, focal loss같은것을 써도 되고, 아무튼 제안한 방법보다는 좋은 실험/해결방법이 많이 있다고 생각합니다. 



저자는 이미 여러번 보컬 탐지 (VD; Singing voice detection) 논문을 냈었는데, 그러다보니 보컬에 있는 프레임이 대체로 에너지가 더 높다는걸 깨달았습니다. 그리고 데이터 기반으로 VD문제를 풀다보면 시스템이 단순히 에너지 기반의 판정을 내려버리는 문제가 생길 수 있죠. 이를 해결하기 위해 컨볼루션 커널의 성분의 합이 0이 되도록 하는 zero-mean convolution을 제안합니다. 이렇게 되면 입력값 X에 있는 offset이 제거된다는것이 3페이지의 식에 잘 나와있습니다.

사실 저도 비슷한걸 드럼 분리에서 깨달았는데 이걸 가지고 휴리스틱으로 점철된 논문을 냈다가 까인게 5-6년전 일이군요. 혹시 관심있으신분...



실험이 잘 되어있는 좋은 논문이네요. 그런데 한편으론 에너지가 더 크다는 것도 정보의 일부고 실제 데이터가 그런 분포를 따른다면 그걸 이용하는것에 반드시 문제가 있다고 할 수 있을지.. 물론 제안하는 방법이 모든 SNR에서 더 좋은 성능을 보였기 때문에 이 경우에는 별로 중요하지 않습니다만.

작년에 나온 (스펙트로그램을 이용하는) U-net기반 음원분리 논문의 time-domain 버전입니다. 전에 여러 번 읽고 구현도 해봤는데요, 몇 가지 특징은..

- 크기가 작은 데이터셋으로 했을 때 스펙트로그램 U-net보다 살짝 좋은 성능이 나왔습니다.
- sisec 2018에서 괜찮은 성능을 보인 시스템 중 하나입니다.
- "valid" 컨볼루션을 사용할것을 제안했습니다. 맞는 방향이라고 생각합니다.
- U-net의 업샘플링 부분(디코더)에서 컨볼루션 레이어 기반의 업샘플링이 아니라 linear interpolation을 사용했는데 이것도 나쁘지 않아보입니다. 그런데 컨볼루션 업샘플링도 파라미터를 잘 셋팅하면 사실 linear interpolation이랑 비슷한 작용을 하는식으로 학습이 되지 않을까 싶기도 하구요.
- 입력 값으로 스테레오 채널을 모두 사용한것은 좋은 방향입니다. 그런데 여기서 한것보다 좀 더 적극적으로 할 수 있을것 같습니다.
- 네트웍의 전반부(인코더)는 conv1d와 decimate를 번갈아가면서 사용했는데, 사실 이것은 dilated conv1d를 쌓은것과 같은 연산을 수행합니다. (본문엔 나와있지 않습니다.)





다소 복잡한 뉴럴넷 구조를 쓰는데 아쉽게도 데이터셋에 따라서 기존 방법 (DSM [2]: 작년 ismir에 나왔던 간단한 컨브넷) 대비 제안한 방법(위의 3개 - segmentation, seg+ note, seg + time)항상 좋지가 않아서 좀 아쉽네요. 데이터셋이 작아서 그럴수도 있다는 생각도 듭니다. 그리고 이런식으로 결과가 나왔다면 데이터셋마다 어떤 특징을 갖고있는지 알아봐야할 때가 아닌가 합니다.

(c)의 데이터셋과 DSM 논문의 저자가 같은 사람(Rachel Bittner)인데요, 자기가 만든 데이터셋으로 제일 열심히 실험을 했던것일지도 -.-

제안한 방법중에 Segmentation이 나머지 두개보다 더 간단한건데 막상 성능은 더 좋게 나왔네요. 물론 차이가 크지 않고, note PNN과 time PNN은 transfer learning을 한것이라 Segmentation이 6 epochs동안 학습을 한 반면 note PNN, time PNN은 2 epochs만에 저 성능을 달성한 것이라고 합니다. 그런데 그건 pre-training시간을 빼고 계산한것인데 pre-training까지 포함하면 정말 유리한지? 물론 pre-training은 한번만 하는 것이니 데이터셋 내지 use-case가 여럿 있다면 여전히 장점이긴 하지만요. 그보다도 어차피 트레이닝 몇시간이면 될것같은데; 차라리 학습 데이터가 덜 필요했다면 모를까 엄청난 장점으로 보이진 않습니다.

전반적으로 실험이나 글쓰기도 괜찮고, Li Su가 공저자로 참여한 논문이 이번에 괜찮았던것으로 기억해서 앞으로 나올 논문도 기대가 많이 됩니다.


연구내용은 다소 평이하지만 런던에 있는 자동작곡 스타트업 Jukedeck에서 나온 논문이라 링크만 걸겠습니다. Jukedeck은 업계에서 상당히 잘 하고있는 스타트업이니 현업에서 어떤 방법을 사용하는지 알 수 있는 좋은 자료입니다.



아주 마음에 드는 논문입니다.

우선 symbolic domain(악보)에서 음악의 스타일을 바꾸는 스타일 트랜스퍼 문제를 푸는 논문입니다. 여기에서는 주어진 음악이 멜로디와 반주(accompaniment)로 이루어진 homophonic music이라고 가정하고, 멜로디를 그대로 둔 채 반주의 스타일만 바꾸는 상황으로 가정합니다. 

LSTM으로 feature를 생성하고, 이를 이용해 다시 autoregressive convnet으로 각 시점의 음표를 생성합니다. 여기에서 핵심은 섹션 2.4 스타일 트랜스퍼에 나온 알고리즘 1입니다.



일단 본문에 나온 바로는 [7] DeepBach의 변형입니다. 그런데 제 이해가 매우 얕아서 누가 자세히 알려주시면 좋겠군요. 


논문 소개 2/3은 여기까지입니다.


Saturday, September 29, 2018

ISMIR 2018 논문 소개 [1/3]



차례

ISMIR 2018 논문 소개 [1/3] (이 게시물)

ISMIR 2018

MIR(Music information retrieval) 분야의 가장 중요한 학회인 ISMIR(/이즈미어/) 2018이 막 끝났습니다. ISMIR는 현재 더블 컬럼 6+n페이지의 논문을 받고 있는데 이번에는 총 104편의 논문 발표가 있었습니다. 매년 제출되는 논문이 늘고있고 작년보다 약간 많은 논문이 나온것 같네요. 참가자수도 약 450명으로 작년의 300여명에 비해 크게 늘었습니다. 머신러닝 전반적으로 관심이 늘어나고 있고 프랑스 파리라는 위치도 한 몫 했겠죠.

이번에는 특이하게 모든 논문이 4분간의 구두 발표와 2시간 가량의 포스터발표를 둘 다 하는 형식으로 학회가 진행되었습니다. 첫 시도였는데 여러가지 장단점이 있었죠. 그리고 처음으로 구두 발표를 유튜브에 실시간으로 중계하였습니다. 

Trend

- 데이터셋 논문의 증가!
- 딥러닝이 절대 다수
- 자동 채보같은 문제에서 Convolutional RNN을 사용한 논문을 여럿 봄
- 세부 주제는 여전히 매우매우 다양함

Tutorials




Papers

ISMIR 논문은 전부 온라인에 공개되어있습니다. 몇몇 논문을 골라서 간단히 소개하겠습니다.

이 논문에서 푸는 문제는 Automatic drum transcription, 즉 드럼 채보입니다. 

드럼이 있는 오디오 신호 --[ADT System]--> 드럼 악보 

여기에서 제안하는 시스템은 Player와 Transcriber로 이루어져있습니다. Player는 학습 데이터가 부족한 부분을 채워주는 모듈로 기존 학습 데이터를 변형하거나 생성하는 역할을 하고, 이를 이용해 Transcriber는 점점 더 채보를 잘 할 수 있게 되는 셈입니다. 논문에서는 Generator/Discriminator로 이루어진 GAN에서 영감을 받았다고합니다. 기존 MIR 연구중에서도 데이터 크기를 키우는 Data augmentation 논문은 여럿 있었지만 이런건 처음보네요.

제안하는 방법은 (남들도 그렇듯) Stochastic gradient descent/Backpropagation입니다. 따라서 전체 end-to-end 시스템을 학습하려면 Player <--> Transcriber간 소통과 player 내부의 동작이 모두 미분가능해야겠죠. 섹션 2.2.1, 2.2.2를 보면 Player의 여러 과정이 θ로 매개변수화 되어있습니다. θ는 드럼 음원에 컨브넷(Player Convnet이라고 부릅시다)을 적용해서 구합니다. 그 결과 원래 입력 파일이 조금 바뀌고 (Augmentation) 추가적으로 다른 드럼 소리가 정해집니다 (Sample addition). 이 과정은 그림2에 잘 나와있습니다. 그림 1이랑 내용이 겹치지만 둘 다 올립니다.





학습은 GAN의 학습을 따릅니다. 즉 Transcriber는 y를 감소하는 방향으로, Player는 (1-y)를 감소하는 방향으로 최적화를 합니다. Wasserstein GAN 의 방식같군요.

실험 결과 분석은 생략합니다. 

4.4 섹션을 보면 Player의 역할에 대한 토의가 있는데 저는 동의하지 않는 내용입니다. 일단 전체 학습 구조가 이렇게 하는게 제일 좋은건지 잘 모르겠어요. 논문의 의도는 학습 데이터가 많지 않아서 뉴럴넷이 판단하기 어려운 케이스를 많이 만들어주는것이라고 하는데, i) Player Convnet이 정말 그걸 판단할 수 있는 구조가 아니라고 생각하구요, ii) Player가 문제를 어렵게 만드는것이 논문에서 의도한대로 학습데이터가 희소한 부분을 채워준다는 보장이 전혀 없습니다. 문제를 어렵게 만드는 전처리과정을 학습한것 이상으로 해석하는건 무리수라고 봅니다. 논문에서 관찰한대로 대부분의 매개변수가 범위내의 극대 혹은 극소값 (-1 혹은 1)을 가진 것은 값이 극단적일수록 일반적인 드럼 신호가 아니라서 문제가 어려워져서 그런것일 가능성이 더 높습니다. 만일 Player도 y를 감소하는 방향으로 학습했다면 Player가 아니라 trained preprocessor가 되었을테니까요. 

깃헙에 각종 데이터와 코드가 올라와있습니다.

다운비트 추정(Downbeat tracking)은 음악 오디오 신호에서 각 마디의 시작점(들)을 찾는 문제입니다. 최근에 딥러닝 기반의 다운비트 추정 시스템 논문이 여럿 나왔는데 이를 분석하는 논문입니다.

다운비트 추정 문제는 리듬과 직접적인 연관이 있는 문제이고 따라서 시스템이 리듬과 관련된 특징값 추출 --> 뉴럴넷 --> 각종 후처리로 이루어져있습니다. 그러다보니 여러 시스템을 공정하게 비교하기가 어렵고 각 과정의 중요도 내지 기여도를 판별하기 어려운데 이 논문에서 분석을 시도합니다.

그런데 논문에서 해석한것과 달리 저는 후처리(thresholding vs DBN) 말고는 전체적으로 큰 영향이 없는것으로 봅니다. 특히 중요한 요소라고 한 Datum vs Beat -- input signal granularity는 그렇게 중요하지 않아보여서 좀 의문입니다. 

굉장히 좋은 연구입니다. 실험을 더 추가할것도 없이 바로 TISMIR에 낼 수 있는 깊이가 아닌가 합니다.

크게 보면 자동작곡을 다루는 논문입니다. 여기에서는 멜로디에 맞는 코드를 찾는 harmonization과 코드에 맞는 멜로디를 생성하는 melodization을 번갈아가면서 수행하는 시스템을 보여줍니다. 이렇게 번갈아가면서 음악의 요소를 업데이트하는 방식은 실제로 사람이 작곡을 할 때도 거치는 과정이죠. "To partially and incrementally refine the (music) piece"라는 표현을 본문에서 사용했네요.



그림 2를 보면 각 모델이 어떤 역할을 하는지 잘 나와있습니다. i) 코드의 흐름을 먼저 예측하고 ii) 코드가 바뀌는 타이밍을 정하고 iii) 다시 코드 내에서 멜로디의 음표가 나오는 타이밍(멜로디의 리듬)을 예측하고, iv) 마지막으로 이에 맞추어 각 음표의 음고(pitch)를 결정하여 멜로디를 완성합니다.

온라인 데모도 보시길 추천합니다.

글쓰기도 나쁘지 않고 실험도 잘 했습니다. 다만 실제로 목적하는 바를 달성했는지 다소 의문이 들기도 하는데, 제가 많이 접해본 내용이 아니라 실험 결과를 평가하기가 어렵네요.

일단 논문의 목적은 VAE로 음악의 representation을 학습하되 (audio signal --[VAE]--> latent vector) 그 결과로 나온 latent vector가 우리가 원하는 의미를 갖도록 하는 것입니다. 유사한 내용으로 머신러닝에서 이야기하는 "disentangled" representation이 있습니다. 이는 hidden vector의 각 차원이 사람에게 중요한 의미(예: 사진의 밝기, 글씨의 기울기, 선의 굵기..)를 갖도록 한 것입니다. 

섹션 2.1엔 일반적인 VAE 수식이 정리되어있습니다. 쉽게말해 AE(Auto-encoder), 즉 자기 자신을 복원하는(encode-decoder) 뉴럴넷인데 중간에 나오는 hidden variable 혹은 latent vector인 $z$가 정규 분포를 따른다고 가정하고 이 정규분포의 평균과 분산이 인코더의 최종 결과가 되는 구조입니다. 디코더는 이 정규분포를 따르는 확률변수를 샘플링한 값을 입력으로 합니다. 논문의 그림 1에서는 인코더=Analysis, 디코더=Synthesis가 됩니다.



그림 1 우측을 보면 각 음원의 음색을 사람이 평가한 Perceptual ratings이 있죠. 얘네들을 MDS를 써서 차원을 줄인 것이 $\tau$입니다. 이제 이 정보를 이용해서 $z$가 $\tau$와 어떤 연관을 가지면서 학습이 이루어지게 하려고 합니다. 이를 위해 추가한 항이 식 (4)이고 그 결과 최종적인 비용함수는 식 (4) 바로 위처럼 됩니다.

그럼 어떤 연관을 갖게될까요? 본문에서는 "we want the distances between instruments to follow the perceptual distance" 라고 설명합니다. 즉 두 악기간에 인지적인 차이(perceptual distance)와 각 악기를 압축한 값 $z$의 차이가 서로 비례하도록 학습이 진행되는거죠. 이 거리(distance)를 측정하는 방법으로 유클리디안과 가우시안을 사용합니다.



섹션 3.1이 다소 뜬금없는데 여기서 설명하는 내용이 정확히 시스템에 어떻게 들어갔다는것인지 저는 잘 이해하지 못했습니다. 이 prior가 비용함수에 포함되었다는 것인지..



실험 결과를 보죠. 이렇게 학습을 진행하고 나온 결과 $z$ 를 PCA를 써서 3차원으로 압축한 것이 그림 3의 (b), (c), (d)입니다. 일반적인 VAE를 쓴것이 (a)구요. 제안한 방법대로 하면 각 악기별로 훨씬 더 구분이 된 결과가 나옵니다. 눈으로 봤을때 원하는 결과가 잘 나온것이죠.

섹션 5.2/표1이 좀 재밌는데요, 이 결과를 다시 레이어 1개짜리 뉴럴넷에 넣고 악기 분류 작업을 돌린 결과입니다. 일반적인 VAE가 악기 분류 작업을 제일 잘합니다! 저자들은 제안한 방법대로 하면 사람이 구별하기 어려운 악기들이(즉 종류는 다르지만 perceptual distance가 아주 작은 악기들이) 서로 겹치게 되어서 이런것이 아닌가 추측하네요.

5.3, 5.4, 5.5도 모두 의미있는 토의가 있고 특히 5.5는 온라인에 관련 영상도 있으니 참고하시길 바랍니다. 2페이지를 꽉 채운 결과 설명이 아주 인상적인 좋은 논문이네요. 



여기에서는 (convolutional) GAN으로 음악을 만드는 방법을 제안합니다. 일단 피아노롤(가로축은 시간, 세로축은 각 음표)을 생성하는 GAN인데, 최종 레이어에서 Binary value(0 또는 1)를 바로 생성하도록 수정을 가한것이 이 논문의 특징입니다. 

간단한 변화지만 뚜렷한 장점이 있네요. 기존에는 real-value로 나타난 피아노롤을 생성하고 사용할때는 이를 적당한 기준값으로 반올림하거나(thresholding) 값을 베르누이 확률분포의 파라미터로 보고 샘플링하는 방식(Bernoulli sampling, BS)을 사용했는데 둘 다 최종 결과물이 학습 과정시에 나오지 못하고 따라서 학습을 통해 해당 부분을 최적화할 수가 없습니다. 예컨대 GAN의 Discriminator가 이진화된 피아노롤을 못보는 것이죠. 이 내용이 2페이지의 '2 potential benefits' 중 첫번째 내용입니다. 두번째 장점은 학습 용이성입니다. 최종 결과물이 이진값이므로 전체 경우의 수가 급격히 감소합니다.

논문에서는 두가지 방식으로 이진화를 합니다. 식 (2)와 (3)에 설명되어있습니다. 그런데 원리 자체는 기존 방식과 크게 다르지 않고, 중간에 unit step function u()가 있는데 얘네들이 어떻게 미분가능한것인지 잘 모르겠네요.

실험 결과는 표 1에 정리되어있습니다. pretrained가 GAN을 쓰지만 제안한 Binary neuron을 안 쓴 것이구요. 그 외에 각종 학습방법에 따라 proposed, joint, end-to-end가 있습니다. 그런데 결과를 들여다보면 pretrained과 proposed가 별 차이가 없는 점은 좀 아쉽습니다.



OMR(Optical music recognition)은 이미지 파일로 악보를 받고 이를 인식하는 작업입니다. 악보 사진을 찍으면 이를 미디나 musicxml같은것으로 변환해주는 앱을 상상하시면 됩니다.



악보라서 일반적인 시각 객체 인식과는 조금 다르지만 일반적인 방법론을 대략 따르는것으로 보입니다. 이런 특징때문에 DWD(Deep watershed detector)를 사용합니다. 저자에 의하면 "simplify the desired energy surface to having small conical energy peaks of radius n pixels at the center of each object and be zero everywhere else" 라고 하는군요. 악보는 인쇄했거나 사람이 직접 오선보에 썼거나 결국 흑백으로 된 텍스트 비슷한 것이라 이 DWD를 적용하기에 적합한 상황이라고 합니다.




세상에서 유일하게 베이스 기타에 특화된 MIR을 최소 5년째 하고있는 Jakob의 논문입니다. 재즈 음악관련 과제가 있어서 가능한것이긴 하지만 정말 징한 녀석이죠.. 물론 제 논문을 2개나 인용했으므로 아주 좋은 논문인건 확실합니다.

그림 1을 보면 여러 악기가 섞여있는 음악 신호를 받아서 베이스 부분만 남긴(=Bass saliency estimation) 결과 예시가 나와있습니다. 이렇게 하고 나면 음원 분리나 채보 등의 작업을 하기에 유리해지겠죠.




일단 여기에서 [1/3]부를 마칩니다. 

Monday, September 10, 2018

음원분리 데모 SiSEC 2018

SiSEC은 Signal Separation and Evaluation Campaign의 약자로 2008년에 시작된 음원분리 경진대회입니다. 최근에 이 첼린지도 굉장히 많은 변화가 있었는데, 특히 홈페이지가 아주 예쁘게 단장되고 온라인에서 바로 데모를 들을 수 있게 되었습니다. 바로 여기! 입니다. (https://sisec18.unmix.app/#/) 최신 음악 음원분리 알고리즘의 성능을 쉽게 확인할 수 있습니다.

특히 2016년부터 데이터셋도 아주 예쁘게 정리가 잘 되어서 나오네요. 데이터셋은 MUSDB18인데 데이터셋을 편리하게 사용할 수 있게 유틸리티까지 오픈소스로 되어있어서 아주 쾌적하게 연구를 시작할 수 있습니다.

올해 열렸던 첼린지를 간단히 정리한 보고서가 아카이브에 공개되었으니 역시 참고하시길 바랍니다.

Tuesday, July 17, 2018

미국 O-1A 비자 신청 과정 정리

개인적인 기록 목적을 겸하여 O-1A 비자 신청과정을 간단히 정리했습니다. 시간 역순이니 참고하시길. 

  • 7/19 (목) 비자 수령
    • 비자 수령 완료. 
  • 7/17 (화) 미국대사관 인터뷰.
    • 필요했던 구비서류: I-797 (approval notice), interview confirmation page, DS-2019 confirmation, passport, 
    • 사진: 검토는 했는데 다시 돌려줌
    • 나머지 (resume, offer letter): 전혀 필요없었음
    • 인터뷰 내용: “Spotify애서 일하냐? 무슨 하냐? 언제 어떻게 그런 기술을 익혔냐? 서류에 머신러닝 어쩌구 써있는데 머신러닝이 뭔지 설명해볼래?”
    • 고지내용과 달리 일반적인 백팩정도는 가져가도 .
    • "이번주 안에 받을거다"라고 알려줌!
  • 7/13 택배 수령 (1)
    • 대사관에서 이메일 와서 일양택배로 찾으러감
    • 열어보니 인터뷰 대상이 아니라고 인터뷰 예약하라고 (제길)
    • 가장 빠른날이 8/6()라서 좌절
    • emergency request 회사 내부 사정과 컨퍼런스 참석이 있어서 8 첫째주에 가야하고 따라서 빠른 인터뷰 예약이 필요하다고 아래처럼 적어서 보냄. offer letter 첨부함. 
* Disclaimer: I am not a student or an exchange visitor *

Dear Officer, 
A technical conference in which I am presenting is due in the first week of August in New York, Spotify, where I work. Since the U.S. Embassy website page showed me that I was exempted for an interview last week, I calculated last week of July would be possible. I would therefore very much appreciate if you could consider me for the emergency service the interview.  

As shown in the attached document, my employment contract with Spotify was signed on March 6th, 2018, for which I need to be located in New York and I have been working to obtain a O1 visa ever since.  

    • 몇시간 뒤에 승인 메일이 와서 7/17 예약함
  • 7/10 택배로 서류 보냄
    • 인터뷰 면제 확인서, resume, passport, photo, ds-2019 confirmation 보냄
    • I-797 안보냄! (아직 스캔본을 못받아서)
  • 7/6 비자 인터뷰 신청
    • 온라인에서 마무리하고 돈도 내고 등등 .
    • 신청을 마무리했더니 비자 면제 대상자라고 .
  • 7/6 O-1A visa approved
    • USCIS에서 드디어 비자 신청을 승인! 했다고 변호사에게 연락받음
  • 6/23 추가 서류 송부
    • “We received a very basic request for information from the government, and will respond to the request today or by Monday”
  • 6/9 O-1A petition 제출!
    • Filing the petition via premium processing
    • 분량: 16페이지
  • 5/25 변호사가 petition 초안 완료
    • 향후: 자기들이 리뷰내가 리뷰회사가 리뷰제출
  • 4/20 5/6 추천서 패스
  • 4/19 4/6 추천서 패스
  • 4/18 추천서 2/6, 3/6 패스
  • 4/13 추천서 1/6 패스
  • 3/23부터 계속: 교수들에게 답변 받음.
  • 3/17 추천서 작성에 필요한 질문양식 받음
  • 3/14 기초적인 정보 (미국방문이력 몇가지 질문) 답변
  • 3/10 로펌에서 petition application 관련 연락 받음

Sunday, February 25, 2018

오픈소스에 기여하는 방법

이번에는 오픈소스에 기여하는 방법을 자세히 안내해드리겠습니다.
제가 사랑하는 패키지 librosa에 제가 했던 PR을 예로 들죠.

WHY?

1. 오픈소스 소프트웨어 발전에 기여하므로 기분이 좋다
2. Git을 중심으로 여럿이서 개발하는 작업 흐름을 배운다 (유닛테스트, 문서화,..)
3. 여럿이서 개발할때 지켜야할 룰을 배운다. (코딩 컨벤션)
4. 학계, 업계의 사람들과 소통하며 인맥을 쌓는다.
5. 해당 버전의 소프트웨어가 인용되면 인용수가 올라간다. (개이득)

WHY NOT?

1. 어떻게 하는지 모른다.
2. 안해도 아무도 뭐라고 안함.
3. 귀찮다. 바쁘다.
4. 영어로 소통해야하므로 부담스럽다.

Pull Request?

줄여서 PR이라고 하죠. Pull해달라고 요청하는건데요, 다시말하면 내가 이런저런걸 고쳤으니 이걸 받아들여달라고 요청하는겁니다.

절차

정해진 방법이 있는건 아니지만 아래 과정을 참고하시죠.
- Issue 보드에서 새로운 기능이나 버그에 대해 논의하고 패키지 주인장과 공감대를 형성한다.
- 깃헙에서 해당 패키지를 Fork하고 그걸 clone한다. 
- Fork한 패키지에서 Branch를 하나 만든다
- Branch에서 버그를 고치든지, 새로운 기능을 추가하든지하고 이걸 Push한다.
(주의사항: 각 PR은 1가지 내용만 담고있어야합니다. 예를들어 버그 2개를 한번에 고치는 PR은 가급적 피하고 나눠서 해야합니다. 그래야 패키지 관리하는 입장에서 편리합니다.)
- Push한 내용을 PR한다
- 한번에 받아들여질수도 있지만 주인장이 원하는 요구사항이 있으면 이를 따른다. (예: 문서화 추가, 예제 추가, 테스트코드 수정 등..)
- 최종적으로 PR이 Merge된다. 끝!

예제

제 PR을 보시면 처음에 #647로 논의를 하고, 이에따라 첫번째 PR을 날렸습니다. 그런데 여기에는 유닛테스트가 잘 되어있지 않아서 이에대해 논의했고, 기존 코드와의 일관성을 위해 API에 대해서도 논의했네요. 테스트 방법과 코드 세부사항을 좀 더 논의했고 최종적으로 Merge가 되었습니다.


다소 귀찮지만 하다보면 굉장히 뿌듯하고 재미있습니다. 배우는것도 많구요. 특히 학교에서만 있으면 협업하며 개발하는 방법을 경험하기 어려우니 꼭 한번쯤 해보시길 권합니다. 

Thursday, February 8, 2018

<처음 배우는 데이터 과학> 한빛소프트 판매 시작





제가 번역한 책 <처음 배우는 데이터 과학>이 곧 출간됩니다.  
초보자용 데이터 과학 입문서로 광범위한 내용을 쉽게 다룹니다. 재미있게 읽어주세요.


----------
목차를 첨부합니다. 좀 길군요.


CHAPTER 1 데이터 과학 유니콘이 되자!
1.1 데이터 과학자는 단지 연봉이 높은 통계학자일 뿐이다?
1.2 왜 파이썬을 쓰나요?
1.3 한마디 더

[Part 1 데이터 과학 필수 요소]

CHAPTER 2 큰 그림으로 보는 데이터 과학
2.1 문제 파악
2.2 데이터 분석 및 이해 - 기초
2.3 데이터 분석 및 이해 - 전처리
2.4 데이터 분석 및 이해 - 데이터 탐험
2.5 특징값 추출
2.6 모델 수집 및 분석
2.7 결과 정리 및 발표
2.8 코드 배포
2.9 반복 작업
2.10 주요 용어

CHAPTER 3 프로그래밍 언어
3.1 왜 프로그래밍 언어를 사용해야 하나요? 다른 대안은 없나요?
3.2 데이터 과학에서 사용하는 프로그래밍 언어
3.3 파이썬 속성 코스
3.4 문자열 데이터
3.5 함수 정의하기
3.6 파이썬의 공학용 라이브러리
3.7 개발 환경 및 라이브러리 소개
3.8 파이썬 관련 문서 및 참고 자료
3.9 더 알아보기
3.10 주요 용어

CHAPTER 4 데이터 먼징 : 문자열 다루기, 정규표현식, 데이터 정리하기
4.1 생애 최악의 데이터셋
4.2 실수를 예방하는 방법
4.3 데이터 자체의 문제
4.4 데이터 형식 문제
4.5 데이터 형식 정리 예제
4.6 정규표현식
4.7 실제 현장 이야기
4.8 더 알아보기
4.9 주요 용어

CHAPTER 5 시각화와 대푯값
5.1 파이썬의 시각화 도구
5.2 아이리스 데이터셋
5.3 원형 차트
5.4 막대그래프
5.5 히스토그램
5.6 평균, 표준편차, 중간값, 백분위
5.7 상자그림
5.8 산포도
5.9 산포도와 로그 축
5.10 산포 행렬
5.11 히트맵
5.12 상관관계
5.13 안스콤 쿼텟 데이터셋과 대푯값의 한계
5.14 시계열 데이터
5.15 더 알아보기
5.16 주요 용어

CHAPTER 6 머신러닝 개론
6.1 역사적 맥락
6.2 지도학습과 비지도학습
6.3 학습 데이터, 시험 데이터, 과적합
6.4 더 알아보기
6.5 주요 용어

CHAPTER 7 특징값 추출
7.1 일반 특징값
7.2 데이터 표본 여러 개의 대푯값
7.3 복잡한 특징값
7.4 어떤 특징값을 예측할지 결정하기

CHAPTER 8 머신러닝과 분류
8.1 분류기란?
8.2 현실적인 고려사항
8.3 이진 분류와 다범주 분류
8.4 예제 코드
8.5 다양한 분류기의 특징
8.6 분류기 평가하기
8.7 분류 기준값 정하기
8.8 더 알아보기
8.9 주요 용어

CHAPTER 9 의사소통과 문서화
9.1 일반적인 원칙
9.2 슬라이드 작성
9.3 보고서 작성
9.4 발표하기
9.5 코드 문서 작성하기
9.6 더 알아보기
9.7 주요 용어

[Part 2 데이터 과학 확장팩]

CHAPTER 10 비지도학습 : 군집화와 차원 축소
10.1 고차원의 저주
10.2 아이겐페이스와 차원 축소 예제
10.3 주성분 분석
10.4 스크리 도표와 차원 이해하기
10.5 요인 분석
10.6 주성분 분석의 한계
10.7 군집화
10.8 더 알아보기
10.9 주요 용어

CHAPTER 11 회귀
11.1 당뇨 진행 상황 예측 예제
11.2 최소제곱법
11.3 비선형 커브피팅
11.4 커브피팅 평가 : R2과 상관관계
11.5 오차의 상관관계
11.6 선형 회귀
11.7 라소 회귀와 특징값 선정
11.8 더 알아보기
11.9 주요 용어

CHAPTER 12 데이터 인코딩과 파일 형식
12.1 일반적인 데이터 형식
12.2 CSV 파일
12.3 JSON 파일
12.4 XML 파일
12.5 HTML 파일
12.6 Tar 묶음 파일
12.7 Gzip 파일
12.8 Zip 파일
12.9 이미지 파일 형식
12.10 바이트 데이터
12.11 정수형
12.12 실수형
12.13 텍스트 데이터
12.14 더 알아보기
12.15 주요 용어

CHAPTER 13 빅데이터
13.1 빅데이터가 정확히 뭔가요?
13.2 하둡과 하둡 파일시스템
13.3 HDFS 사용하기
13.4 파이스파크 예제 코드
13.5 스파크 둘러보기
13.6 스파크 연산
13.7 파이스파크를 실행하는 두 가지 방법
13.8 스파크 설정하기
13.9 파이스파크 : 더 깊이 살펴보기
13.10 스파크 : 팁과 주의사항
13.11 맵리듀스 패러다임
13.12 성능 개선을 위한 고려사항
13.13 더 알아보기
13.14 주요 용어

CHAPTER 14 데이터베이스
14.1 관계형 데이터베이스와 MySQL
14.2 키-값 저장소
14.3 와이드 컬럼 저장소
14.4 문서 저장소
14.5 더 알아보기
14.6 주요 용어

CHAPTER 15 좋은 프로그래밍 습관 기르기
15.1 코딩 스타일
15.2 버전 관리와 깃
15.3 테스트 코드
15.4 테스트 주도 개발 방법론
15.5 애자일 방법론
15.6 더 알아보기
15.7 주요 용어

CHAPTER 16 자연어 처리
16.1 자연어 처리가 필요한 상황
16.2 언어와 통계
16.3 주식 관련 신문 기사의 감정 분석 예제
16.4 자연어 처리 소프트웨어 및 데이터셋
16.5 토큰화
16.6 BoW 특징값
16.7 단어 빈도와 문서 빈도 역수
16.8 n-그램
16.9 불용어
16.10 표제어 추출과 공통부분 추출
16.11 동의어 처리
16.12 품사 태깅
16.13 그 외 문제들
16.14 자연어 처리 심화과정
16.15 더 알아보기
16.16 주요 용어

CHAPTER 17 시계열 데이터 분석
17.1 위키피디아 조회수 예측 예제
17.2 시계열 데이터 분석 순서
17.3 시계열 데이터와 타임스탬프 데이터 비교
17.4 내삽법과 외삽법
17.5 신호 스무딩
17.6 간단한 데이터 전처리
17.7 추세와 주기성
17.8 윈도 적용
17.9 시계열 데이터의 특징값 추출
17.10 특징값 추출 심화 과정
17.11 푸리에 분석
17.12 시계열 데이터와 특징값
17.13 더 알아보기
17.14 주요 용어

CHAPTER 18 확률
18.1 동전 던지기와 베르누이 확률변수
18.2 다트 던지기와 균등확률변수
18.3 균등분포와 유사난수
18.4 비이산 불연속 확률변수
18.5 표기법, 기댓값, 표준편차
18.6 종속성, 주변확률, 조건부확률
18.7 확률분포의 꼬리
18.8 이항분포
18.9 푸아송 분포
18.10 정규분포
18.11 다차원 정규분포
18.12 지수분포
18.13 로그 정규분포
18.14 엔트로피
18.15 더 알아보기
18.16 주요 용어

CHAPTER 19 통계
19.1 데이터 과학과 통계학
19.2 베이지언과 빈도론자의 비교
19.3 가설검정
19.4 다중 가설검정
19.5 매개변수 추정
19.6 t 검정
19.7 신뢰구간
19.8 베이지안 통계학
19.9 나이브 베이즈
19.10 베이지안 네트워크
19.11 선험적 확률 추정
19.12 더 알아보기
19.13 주요 용어

CHAPTER 20 프로그래밍 언어의 주요 개념
20.1 프로그래밍 방법론
20.2 컴파일과 인터프리팅
20.3 자료형 체계
20.4 더 알아보기
20.5 주요 용어

CHAPTER 21 알고리즘의 성능과 메모리 관리
21.1 예제 코드
21.2 알고리즘의 성능과 빅오표기법
21.3 정렬 알고리즘과 이진검색
21.4 평균복잡도와 분할상환분석
21.5 오버헤드 줄이기, 메모리 관리
21.6 팁 : 수치연산 라이브러리를 이용하자
21.7 팁 : 사용하지 않는 대용량 객체를 삭제한다
21.8 팁 : 가능하면 내장 함수를 사용한다
21.9 팁 : 불필요한 함수 호출을 자제한다
21.10 팁 : 덩치가 큰 객체는 가급적 새로 만들지 않는다
21.11 더 알아보기
21.12 주요 용어

[Part 3 데이터 과학 특수 분야]

CHAPTER 22 컴퓨터 메모리와 자료구조
22.1 가상 메모리
22.2 C 언어 예제
22.3 자료형과 배열
22.4 구조체
22.5 포인터, 스택, 힙
22.6 주요 자료구조
22.7 더 알아보기
22.8 주요 용어

CHAPTER 23 최대 우도 추정과 최적화
23.1 최대 우도 추정
23.2 커브피팅 예제
23.3 로지스틱 회귀 예제
23.4 최적화
23.5 경사 하강법과 볼록 최적화
23.6 볼록 최적화
23.7 확률 경사 하강법
23.8 더 알아보기
23.9 주요 용어

CHAPTER 24 고급 분류기
24.1 라이브러리 선정
24.2 딥러닝 기초
24.3 합성곱신경망
24.4 텐서
24.5 MNIST 숫자 필기 인식
24.6 순환신경망
24.7 베이지안 네트워크
24.8 학습 및 예측
24.9 마르코프 연쇄 몬테카를로 방법
24.10 파이엠시 예제
24.11 더 알아보기
24.12 주요 용어

CHAPTER 25 확률 과정
25.1 마르코프 연쇄
25.2 마르코프 연쇄의 종류
25.3 마르코프 연쇄 몬테카를로
25.4 은닉 마르코프 모델
25.5 비터비 알고리즘
25.6 랜덤워크
25.7 브라운 운동
25.8 ARMA 모델
25.9 연속 마르코프 과정
25.10 푸아송 과정
25.11 더 알아보기
25.12 주요 용어