Neural Network란 생물학의 신경망에서 영감을 얻는 통계학적 학습 알고리즘이다. 신경망의 뉴런과 시냅스를 Node와 가중치를 가진 Edge로 대체하는 것인데, 입력 값을 넣어서 ‘원하는’ 출력 값을 얻는 것이 이 알고리즘의 최종적인 목표이다. 이 알고리즘이 어떤 식으로 움직이는지에 대한 간단한 예를 설명하겠다.
Target Function => Y= aX^2+bX+c 라는 함수가 있다고 가정하자.
여기서 Node를 X^2, X, 1로 설정하고, 가중치 a,b,c를 구하거나 설정하면 우리가 원하는 결과 값을 얻을 수 있음을 알 수 있다. 이처럼 모든 함수에 대한 계산을 Neural Network로 대체할 수 있다는 것이 증명되어 있어서 한때는 많은 이들이 이것이 우리가 나아가야 할 길이 아닌가라는 말을 많이 했었다. 하지만 문제는 해답을 향한 길이 존재한다는 것은 알고 있지만, 이것이 유일한 길인지도 불분명하고, 가중치와 노드를 어떻게 설정할 것인지에 대해서 아무도 명확한 답을 낼 수 없다는 한계를 지니고 있다.
RNN – Recurrent Neural Network는 NN에서 불가능했던 것을 가능하게 한다. 구조의 내부에 Loop를 가지고 있어서 정보가 지속성을 가지게 하여, 이전의 정보를 활용하여 다음 정보를 예측할 수 있도록 한다. 이전 정보를 현재 작업에 연결할 수 있게 하여 많은 성과를 이루어 냈다. 이전 정보를 이용하여 다음 정보를 예측하여 출력하고자 하는 것이 RNN의 핵심이다.
우리는 Open Source 인 RNN-LSTM 기반의 Music Generation 알고리즘에 한 곡 만을 training 후 음악 생성을 시도하였다
우리는 이 코드를 분석하려고 하였으나 단 기간 내에 결과를 도출하기에는 어려움이 있어 간단한 언어 모델을 변형하여 음악 생성에 접근해보고자 한다.
- 중간 모델 -
언어 모델링 중 n-gram model을 소개하고자 한다
이는 어떠한 state가 나타날 확률은 이전 state들을 알고 있을 때 각 state가 나타날 확률의 곱이 된다. State가 <18 30 72 40 50>일 확률은 <18 30 72 40>이 주어졌을 때 그 다음 <50>이 나타날 확률 곱하기 <18 30 72>가 주어졌을 때 <40>이 나올 확률 곱하기 <18 30>이 주어졌을 때 <72>가 나올 확률 곱하기 <18>이 주어졌을 때 <30>이 나올 확률을 곱한 값이 된다.
우리는 MIDI 파일의 Pitch를 위의 n-gram model로 각각 학습 후 음악을 생성해보고자 한다. State는 < Midi Pitch > Set 를 학습을 시킬 것이며, Input data는 < START_TOKEN – Midi Pitch >으로 구성되고 driven data는 < Midi Pitch – END_TOKEN > 으로 구성될 것이다.
단어 베이스 언어 모델이란, 우리가 사용하는 무수한 말과 문자에서 특정 단어가 나올 확률을 계산해내려는 시도에서 나온 모델이다. 말이라는 것이 앞에 어떤 단어가 나왔는지에 따라 그 의미가 크게 변하고, 나올 확률이 크게 다르기 때문에 ‘조건부 확률’ 개념을 차용하여, 앞에서 나온 단어 배열을 가지고, 다음에 어떤 말이 나올지 예상을 할수 있다는 발상에서 나온 모델이다. 이에 우리는 단어 모델 중 간단한 n-gram model을 이용하여 음악을 학습시키고 새로운 음악을 생성시키고자 하였다. 이 모델을 채택한 이유는 음악과 언어는 둘 다 순차적인 흐름으로 이루어져 있고 이전의 정보가 현재의 정보 선택에 영향을 끼친다는 공통점이 있기 때문이다.
Midi 타입의 파일을 읽어 각 음표를 숫자로 변환하여 음의 길이와 높이를 나타낼 수 있게 하였다. Midi의 Note Classification을 따라 -1옥타브C부터 9옥타브G까지 128개의 음 높이와 8개의 음의 길이 속성, 도합 128*8개의 Note Element로 분류하였다. 이를 통해 Midi를 벡터화 시켰다. 이후 벡터화 시킨 음악 데이터를 토큰화 시켜 러닝을 할 수 있는 상태로 변환하였다
n-gram model을 target function으로 Neural Network 모델 중 sequential data를 처리하기 적합한 Recurrent Neural Network (RNN)을 선택하였다. 이 모델 t번째의 음〖(x〗_t) 을 입력 값으로 갖고 t+1번째의 음(o_t)을 예측한 것을 출력 값으로 내놓으며, Hidden Layer는 sequence를 기억한다.