• 검색 결과가 없습니다.

< 연구 결과요약서 > 소속 학교

N/A
N/A
Protected

Academic year: 2022

Share "< 연구 결과요약서 > 소속 학교"

Copied!
31
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

< 연구 결과요약서 >

소속 학교 낙생고등학교 책임 지도교사 이O민

참여 학생 신O택, 김O우, 손O호, 이O찬

과 제 명 Tensorflow를 이용한 고전주의 음악의 분석 및 작곡

연구목표 인공지능을 이용하여 음악 분석 및 작곡 프로그램을 개발하여 기존의 음악들과 비교한다.

연구개요 및 내용

□ 이론적 배경 및 선행연구

○ 선행 연구

Deep Jammer란, 고전주의 작곡가의 음악을 통해 클래식 피아노 음악을 구성하는 DNN 이다. Deep Jammer의 구조는 음악을 나타내는 입력 행렬, 다음에 재생 할 것을 나타내 는 출력 행렬, 많은 음악을 듣고 학습하는 NN(신경망)으로 이루어져 있다. Deep Jammer 는 Time(시간), Note(음), Attribute(속성, 음표의 상태를 요약한 값이다.)의 3차원 행렬을 입력으로 받고, 다음 음을 연주할 확률(Play Probability)과 음이 유지될 확률(Articulate Probability)을 가지는 속성과 음의 2차원 행렬을 출력하게 된다. Deep Jammer는 시간과 음 사이의 패턴을 분석하기 위해 Biaxial RNN(2축 RNN)을 채용하였는데, 이는 Time 축과 Note 축을 가지는 RNN으로, 두 축을 사용하여 음악의 불변성을 가지게 한다.

○ 이론적 배경 ⅰ) 고전주의 음악

고전주의 시대가 시작된 18세기는 범세계적인 시대로, 세계화가 시작되었다. 이에 따라서 음악을 포함한 모든 예술들이 한 나라에서 국한되어있는 것이 아니라 세계적으로 통용되고 모든 사람이 즐길 수 있어야 했다. 따라서 고전주의 시대의 음악들을 모든 사람들이 이해하고 함께 즐길 수 있도록 대부분 일정한 형식과 구조가 갖추어져 있다. 그 중에서도 소나타 형식은 보통 3~4악장의 곡으로, 주로 1악장과 4악장이 좁은 의미에서의 소나타 형식이라고 불리는 제시부 – 전개부 – 재현부의 3단 구성으로 이루어져 있다.

ii ) DNN/DRNN

ANN은 입력층-은닉층-출력층의 구조로 이루어져 있는데, 딥러닝을 위해 사용되는 DNN(심층신경망)은 다수의 은닉층으로 구성되어 있다. 또한, 정교한 학습을 위해 은닉층 과 출력층이 교차로 여러 개가 배치되는 경우는 RNN(순환신경망)이라 하며, 순환신경망 에 여러 개의 은닉층을 배치하는 경우는 DRNN이라 한다.

iii ) LSTM

LSTM 네트워크는 RNN의 한 종류로, Time series 데이터를 기반으로 분류(Classification) 와 예측을 하는데 적합한데, 기존 RNN은 이런 Time series 데이터를 처리할 때, 데이터 가 사라지는 문제(vanishing gradient problem)가 일어나기 때문이다. 간격 길이가 길어져 도 LSTM 네트워크는 기존 RNN에 비해 상대적으로 둔감하여 문제가 생기지 않는다.

iv ) Attention RNN

Attention RNN은 RNN의 메커니즘 중 하나로, 인풋의 구조의 학습을 돕는다. 원래는 자 연어 처리에 사용된다. 인풋 문장의 각 단어에 가중치를 부여하여 어떤 단어에 주의 (Attention)을 더 기울일지를 학습할 수 있다.

v ) Biaxial RNN (2축 RNN)

Biaxial RNN은 기존 RNN의 반복되는 연결에서 시간에 따른 패턴은 허용하지만, 각 음의

(2)

출력이 다른 음의 출력과 완전히 독립적인 문제를 해결하기 위해 고안된 RNN이다.

Biaxial RNN에서는 첫 두 개의 스텝은 시간 축 학습을 하고, 그다음 두 스텝은 음 축 학 습을 하여 시간의 흐름에 따른 음의 흐름을 감지할 수 있게 된다.

□ 연구 주제 선정(목적 및 필요성)

○ 제 4차 산업혁명 시대의 도래에 따라서, 인공지능 프로그래밍이 굉장히 중요한 기술로 자리잡아가고 있는 가운데, Python과 Tensorflow를 이용한 우리만의 프로그램을 개발해보고자 이 연구를 시작하게 되었다.

고전주의 음악을 포함한 클래식 음악들은 현재 대중들에게 큰 관심을 받지 못하고 있다. 악기의 가격도 비싸고, 작곡 방식이 복잡하며 진입 장벽이 높은 편이기 때문이다. 이러한 단점들을 보완하고자 인공지능을 이용하여 작곡을 하는 프로그램을 만드는 연구를 진행하게 되었다.

□ 연구 방법

○ 연구 1) Biaxial-rnn-music-composition-master

1) http://www.kunstderfuge.com/사이트에서 고전주의 음악가들의 midi 파일을 다운받는다.

2) 단계 1)에서 받은 데이터 셋을 music폴더를 만들어 모아놓는다.

3) main.py를 터미널에서 작동시켜 데이터 셋을 학습시킨 후 학습시킨 데이터를 토대로 산출한 midi 파일 형식의 output을 분석한다.

○ 연구 2) Attention Mechanism 적용

1) Tensorflow 기반의 프로그램은 tf.contrib.rnn.AttentionCellWrapper 함수를 사용하여 모 델에 Attention을 씌울 수 있다.

2) Tensorflow 기반이 아닌 경우에는 그 라이브러리에 맞는 Attention 모델을 직접 제작 하거나 오픈소스를 사용한다.

※ 제한점 : Attention Mechanism은 원래 자연어 분석에 쓰이는 방법이다. 그렇기 때문 에 음악 분석에 적용하기에는 많은 어려움이 있었다.

□ 연구 활동 및 과정

○ Biaxial RNN 코드의 진행 시퀀스

1) Repository handler.py를 이용해 학습시킬 repository 설정 2) MusicGenerator.py를 이용해 초기 음악 데이터 셋을 학습시킴

3) Deep Jammer.py에 정의해둔 train 함수를 이용해 loss 적용, 학습함수 생성 4) 학습함수를 deep jammer.py에 정의해 둔 save_configuration 함수를 이용해 저장 5) 학습함수를 이용해 만든 세그먼트들을 deep jammer에서 정의해둔 save_generated_piece함 수를 이용해 저장.

○ Attention Mechanism

각각의 RNN time step들의 아웃풋 벡터들에 Attention mask(가중치)를 씌우고 이 벡터들 을 모두 합친다. 합쳐진 한 개의 벡터는 전의 모든 time step들의 아웃풋들을 나타낸다고 할 수 있다. 이 벡터를 현재 time step의 아웃풋과 합친다.

연구성과

□ 연구 결과

○ 연구 1)을 통해 출력한 Midi의 노트 배열

(3)

그림 1 : 연구 1)을 통해 출력한 Midi의 노트 배열

□ 결과 해석 및 논의

○ 연구 1)을 통해 출력한 Midi의 감상

16초의 짧은 음악이지만, 강약조절이 자연스러우며 멜로디 라인과 반주 라인의 조화가 이루어 진다는 것이 좋았다. 그러나 기존의 클래식 음악보다는 확실히 화음이나 리듬이 복잡하지 않고 단순하다.

○ 연구 1)을 통해 출력한 Midi와 기존 클래식 음악가들의 음악 Midi 파일의 노트 배열 비교

그림 2 : 기존 음악가들의 음악 Midi 파일의 노트의 배열

연구 1)을 통해 출력한 Midi 파일과 기존 클래식 음악가들의 음악 Midi 파일을 비교해보면 복잡성과 길이에 확연한 차이가 있다. 파형의 생김새를 보면, 확실히 기존 음악가들의 음악 Midi 파일이 더 복잡하고 노트들이 많다.

□ 결론 및 제언(시사점 및 향후 계획)

○ AI 작곡의 미래

AI 작곡은 인공신경망을 사용하는 다른 분야들에 비해 아직 발전이 덜 된 분야이다. 이 때문에 연구하기 위한 자료를 수집하는데 많은 어려움을 겪었으며, 공개된 오픈소스가 적어 attention mechanism 모델을 만드는 과정이 순탄치 않았다. 하지만 오픈소스를 찾아보던 중 아직 공개되 지 않은 소스 AIVA를 발견하게 되었다. 곡의 완성도는 매우 높았으며 비전문가가 클래식음악으 로 느끼기에 전혀 손색이 없었다. 이를 보며 AI작곡은 아직 연구가 많이 진행되지 않아서 오픈소 스가 적을 뿐, 이미 완성도 높은 프로그램이 개발되고 있으며 언젠가는 AI가 인간의 작곡까지 대체할 수도 있겠다는 생각이 들었다.

○ 향후 계획

아직 Attention mechanism을 적용한 모델을 완성하지 못했다. 따라서 우리 팀은 남은 연구기간 동안 이 모델을 완성시켜 데이터를 분석하는 데에 전념할 것이며 Attention mechanism을 적용하기 전의 아웃풋과 적용한 후의 아웃풋의 파형을 비교해보고자 한다.

주요어 Tensorflow, LSTM, Biaxial RNN, Attention Mechanism, 고전주의음악, 피아노소나타

(4)

< 연구 결과보고서 >

1. 개요

□ 연구목적

고전주의 음악의 데이터 셋들을 이용하여 Tensorflow를 활용한 프로그래밍을 통해 그 데이터 셋들을 분석하고 그 분석한 값들을 토대로 그 특성들을 살린 새로운 고전주 의 음악을 작곡해내는 프로그램을 개발하는 것이 최종 목표이다.

고전주의 음악을 포함하여, 클래식 음악은 매니아 층을 제외하고는 즐기는 사람들이 극소수이다. 또, 악기의 가격도 비싸고, 작곡 방식은 과정이 매우 복잡하며, 접근성이 매우 떨어진다. 이러한 단점들을 보완하여 우리가 만들 프로그램은 인공지능이 작곡을 하며, 접근성도 좋을 것이다.

이렇게 만든 프로그램으로 음악을 작곡해보고, 인공지능이 만드는 음악이 어떻고, 과 연 그것이 인간이 만든 음악과 어떻게 다르며 그것들이 과연 인간의 음악성을 뛰어 넘 을 수 있을지에 대해서 생각해본다.

□ 연구범위

1. 연구 분야 및 범위

컴퓨터 프로그래밍, 인공지능, 클래식 음악

2. 연구 진행 단계

인공신경망이 적용된 다른 분야들에 비해 아직 활발한 연구가 진행되고 있지 않아 오픈소 스 자료가 풍부하지는 않음.

2. 연구 수행 내용

□ 이론적 배경 및 선행 연구

1. 선행연구 : 딥 재머(Deep Jammer)

딥 재머는 바흐, 베토벤, 모차르트 등의 작곡가의 음악을 통해 클래식 피아노 음악을 구성할 수 있는 DNN으로 작동원리는 다음과 같다.

(5)

그림 1 : 딥 재머의 다이어그램

그림 1을 보면, 다이어그램은 세 부분으로 나누어져 있는데, 음악을 나타내는 입력 행 렬, 다음에 재생 할 것을 나타내는 출력 행렬, 많은 음악을 듣고 학습하는 신경망으로 나누어져 있다. 우선, 입력은 특정 표현으로 변환되는 음악조각으로 세그먼트(segmant) 라고 한다. 이것은 3차원 행렬으로 시간(Time), 음(Note), 속성(Attribute)로 이루어져 있다. 여기서 시간은 128단계로, 음은 88단계(피아노 건반의 수), 속성은 해당 음표의 상태를 요약하는 78개의 속성이 있다. 속성은 피아노 건반에서의 위치, 피치 클래스(플 랫 샤프를 포함하는 C,D,E,F,G,A,B), 주변 음(해당 음의 앞 음과 뒤 음 모두를 말한 다.), 해당 음표의 박자 수등에 따라 달라진다. 출력은 입력 세그먼트 다음 단계에서 재 생되어야 하는 세그먼트를 의미하고, 두가지 행렬로 음과 속성으로 이루어져 있다. 출 력에서의 속성은 두가지 상태를 가지는데, 하나는 다음 시간 단계에서 음을 연주할 확 률을 나타내는 재생 확률(Play Probability)과 다음 시간 단계에서 음이 유지될 확률인 연결 확률(Articulate Probability)로 나눠진다.1)

그림 2 : 각 레이어의 역할을 나타낸 다이어그램

시간 레이어(Time Layer)는 음악의 시간 패턴을 캠쳐하는 LSTM 레이어로, 이전의 시 간 차원을 LSTM 시간으로 취급하여, 네트워크가 시간에 따라 각 음표의 속성이 어떻

1) Deep Jammer : A Music Generation Model (Justin Svegliato, Sam Witty, College of Information and Computer Sciences, University of Massachusetts Amherst) 2 페이지 요약

(6)

게 변하는 지를 학습할 수 있는 레이어이다.

Transpose Layer는 시간 차원(Time Dimension)과 음 차원(Note Dimension)을 변경하 는 처리 레이어로, 이를 통해 음 차원을 LSTM의 새로운 시간 차원으로 설정할 수 있 게 한다.

음 레이어(Note Layer)는 음악의 패턴을 캡쳐하는 LSTM 레이어로, 이를 통해 속성이 음과 다르게 학습되게 하는 레이어이다.

Dense Layer는 고차원 출력을 표준화 되지 않은 예측으로 줄이는 레이어로 시간 레이 어와 음 레이어가 학습한 것을 요약하는 레이어이다.

Activation Layer는 Dense Layer에서 표준화 되지 않은 예측의 각 요소를 시그모이드 활성화 함수를 통해서 표준화 또는 축소를 하는 레이어이다.

2. 이론적 배경 (1) 고전주의 시대

(가) 18세기 세계관

18세기는 범세계적인 시대로, 세계화가 시작되던 시기였다. 어떤 것이든 한나라에서만 국한되어있는 것이 아니라 세계적으로 통용되고 이해되어야 하며, 세계적으로 많은 사 람들이 즐길 수 있고 좋아해야 성공한 것이라고 말할 수 있었다. 이에 따라, 음악도 한 국가에 한정되어 성행하는 것이 아니라 세계적으로 인정받아야 하는 것, 즉 인류의 공 통재산이라는 인식을 가지고 있었으며, 이런 생각을 바탕으로 당시 유럽 사람들은 음 악을 유럽 대륙의 국제적인 언어라고 하였다. 유럽 대륙에서 통하는 음악의 어법이 정 형화되기 시작하였고, 이 어법에 맞으면서도 고상하고 사람들을 즐겁게 할 수 있으며, 불필요한 기교가 없고 정상적인 감각을 가진 대중들이 모두 이해하고 즐길 수 있어야 하는 음악을 추구하였다.2)

(나) 고전주의적 성격과 특성의 확립

음악의 고전주의적 성격과 이념의 확립은 바로크와 고전파의 과도기를 시점으로 하여 하이든과 모차르트, 그리고 베토벤에 나타난 극적인 논리형식으로서의 소나타 형식과 수직적 수평적 구조에 기초를 둔 화성적 대위법적 방법의 결합으로 표현되었다. 이러 한 음악의 성격을 바탕으로 고전주의 시대의 음악은 바로크시대의 음악과 비교하여 형 식구조에의 관심과 기악음악의 중요성이라는 점에서 두드러진 차이가 있다. 3)

2) 서양음악사(A History of Western Music, D.J. 그라우트 저, 서우석 역, 1986) : 고전주의 음악의 바탕이 되는 역사적 사회적 배경 부분을 참고

3) 음악의 이해(윤양석 저, 1987) : 제 2장 음악의 양식적 이해, 210쪽 4문단 첫 번쨰 줄 문장, 211쪽

(7)

(다) 연구에서의 활용 이유

이러한 고전주의 음악은 쉽게 말하자면 다른 시대의 음악들에 반해 전형적 요소가 많 고, 구조적으로 짜임이 있는 음악이라고 할 수 있다. 이는 우리의 탐구에 가장 적합한 음악의 특징이다. 곡들을 분류하고 분석하는 과정에서 정해진 형식에 따라 이를 나누 어 분석하는 것이 효율적이라고 판단하였다.

(2) 소나타(Sonata) 형식 (가) 소나타 형식의 유래

‘소나타‘라는 용어는 ’울리다‘를 뜻하는 이탈리아어 ’sonare’에서 유래된 것이다. 옛날에 는 소나타 형식을 가창하는 악곡인 칸타타의 반대말로 ‘쳐서 울리는 악곡’이라고 인식 되었다. 그러나 오늘날에는 바로크 및 고전, 낭만파시대에 왕성하게 작곡된 다 악장 구 성의 기악곡으로서 독주악기를 위한 작품을 칭할 때 사용한다.

(나) 넓은 의미의 소나타 형식과 좁은 의미의 소나타 형식

넓은 의미로서의 소나타 형식은 3악장 혹은 4악장으로 되어있는 다 악장의 작품 전체 를 가리키는 전곡형식으로서의 소나타 구조를 뜻하고, 좁은 의미로서의 소나타 형식은 소나타 구조의 곡 전체 중에서 1악장, 또는 최종악장에서 볼 수 있는 특수구성을 의미 한다.

전곡형식으로서의 소나타 중 3악장의 소나타는 ‘빠르게 – 느리게 – 빠르게’ 순으로 곡이 진행되고, 4악장의 소나타의 경우 대체로 ‘빠르게 – 느리게 – 보통 빠르기로 – 매우 빠르게‘로 되어있다. 이 중에서 제1악장, 제4악장에 소나타 형식이 많이 사용되며 제2악장에 사용되는 예도 있다. 소나타 음악에서의 악장 중에서 가장 특징 있고 고도 로 조직된 형식구조로서, 제1악장 형식(first-movement form)이라고도 한다.

(다) 소나타 형식의 구성

소나타 형식은 3부의 구성으로 이루어져 있는데, 제 1부는 제시부(Exposition), 제 2 부는 전개부(Development), 제 3부는 재현부(recapitulation)이라고 칭한다. 간단하게 구 성을 말해보자면 먼저 제 1부인 제시부에서 주제의 소재를 제시하고, 제 2부인 전개부 에서는 제시된 소재와 또 다른 새로운 소재가 다른 조성 안에서 전개되며, 재현부에서 는 제 1부인 제시부가 다시 연주된다. 소나타 형식에서 맨 앞에 도입부(introduction), 혹은 맨 뒤에 종결부(coda)가 붙는 경우도 있는데, 이럴 때에는 원래 3부 구성이었던 소나타가 4부 구성, 5부 구성이 되는 경우도 있고, 2부 구성으로 축소되는 소나타 형식 도 존재한다.

(8)

다음 표는 구체적인 소나타 형식의 구성의 흐름을 나타낸 표이다.

제 시 부 전 개 부

제 Ⅰ주제

(First Theme) 연결군 제 Ⅱ주제

(Second Theme) 종결군 코데타 (Codeta)

으뜸조를 벗어난 긴장과 이완, 빈번한

전조와 주제의 동기적 분할, 으뜸조로 돌아가는

경과구

으뜸조 전조 대조적인 조 대조적인 조의 종지

표 1 : 소나타 형식의 구성의 흐름 1

재 현 부 제 Ⅰ주제

(First Theme) 연결군 제 Ⅱ주제

(Second Theme) 종결군 코다(Coda)

으뜸조 ---> 으뜸조 으뜸조의 종지

표 2 : 소나타 형식의 구성의 흐름 2

소나타 형식의 구체적인 구성의 흐름은 먼저 제 1부인 제시부에서 2개의 주제를 서로 다른 조에서 제시한다. 제시부는 크게 제 Ⅰ주제, 제 Ⅱ주제, 그리고 그 둘 사이를 잇 는 경과구(Transition)의 역할을 하는 연결군(intermediate)으로 이루어져 있다. 제 Ⅰ주 제와 제 Ⅱ주제는 소재도 다르고 성격적으로도 대조되는데, 조성관계 또한 서로 다른 조를 취함으로서 대조를 이루고 있다. 대체로 제 Ⅰ주제의 성격은 극적이고 남성적인 것으로 으뜸조로 제시되며 제 Ⅱ주제는 서정적이고 여성적인 것으로, 으뜸조가 장조인 경우에는 딸림조, 단조인 경우에는 병행장조로 제시된다. 이때 병행장조는 단 3도의 조 성이다. 그리고 코데타는 딸림조로 끝맺는다.4)

(라) 피아노 소나타 (Piano Sonata)

피아노 소나타가 꼭 소나타 형식으로 이루어져 있는 것이 아니다. 피아노 소나타에서 의 ‘소나타’의 개념은 독주곡이라는 개념으로 사용된 것으로, 위에서 말했던 큰 범주에 서의 소나타 형식과도 비슷한 의미로 사용된다. 즉, 피아노 소나타 중에는 소나타 형식 인 악장이 포함된 곡들이 일부 존재하며, 그 소나타 형식인 악장이 포함된 곡들에서도 일부 악장만 우리가 찾는 좁은 범위의 소나타 형식이다.

이로 인해, 소나타 형식인 악장이 포함된 피아노 소나타를 찾고, 무슨 악장이 소나타 형식인지도 알아내어야 데이터들을 만들 수 있다.

4) 음악의 이해(윤양석 저, 1987) : p.121~p.123 부분을 참고하여 작성

(9)

(3) 머신 러닝

머신러닝은 "기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실 행할 수 있도록 하는 알고리즘을 개발하는 연구 분야“라고 미국의 컴퓨터 과학자 아서 사무엘에 의해 정의된 바 있다. 인공 지능 기술은 고도로 발달한 머신 러닝을 기반으 로 동작한다. 머신 러닝은 각종 데이터를 가지고 프로그램 자체에서 의미 있는 결과를 도출해내는 과정인데, 그 종류에는 지도 학습, 비지도 학습, 강화 학습 등이 있고, 흔히 말하는 딥 러닝 역시 이러한 머신 러닝의 한 분류이다.

(가) 지도 학습

지도 학습은 훈련 데이터로부터 하나의 함수를 유추해내기 위한 기계 학습의 한 방법 으로 훈련 데이터에는 입력 객체에 대한 원하는 결과 값을 가지고 있다. 이때, 유추된 함수 중 연속된 값을 출력하는 것을 회귀분석(Regression), 입력 벡터가 어떤 종류의 값인지 표시하는 것을 분류(Classification)라고 한다. 일반적인 지도 학습은 데이터 집 합과 원하는 데이터 결과 값을 가지고, 입력하는 학습 데이터 집합을 가지고, 예측 결 과 값들의 오류를 줄여 나가는 비용 함수의 값을 찾아가는 과정이다.

(나) 비지도 학습

데이터가 어느 카테고리에 속하는 지 알 수 없는 데이터를 이용해 학습하는 방식으 로, 데이터의 상호 유사성을 판단해 공통된 특징을 찾아내는 과정을 의미한다.

(4) 딥러닝

머신 러닝의 중심 분야로 좀 더 많은 학습 데이터와 고차원의 입력 값을 기존의 머신 러닝 기술 알고리즘보다 더 잘 처리하는 장점을 가지고 있다. 초기에는 느린 학습 시 간 때문에 적용하기 어려웠지만, 기존 인공신경망 모델의 개선, 하드웨어의 발전, 대량 으로 쏟아지는 빅데이터 등의 복합적 이유로 최근 다시 부활하기 시작했다. 딥러닝의 예시로는 자동 음성 인식, 영상인식, 자연어 처리 등이 있다.

(가) 파이썬(Python)

파이썬은 동적 언어이며, 대소문자를 구별하고, 객체지향 언어이다. 여기서 동적 언어 란 데이터 형식이 존재하지만 명시적 선언을 필요로 하지 않는 것을 의미한다.

가령 C언어에서는 변수설정을 할 때, int a = 1; 과 같은 방식으로 미리 데이터 형식을 선언 해주어야 하지만, 파이썬은 a = 1; 만으로 변수선언이 가능하다.

파이썬은 블록의 구분문자를 사용하지 않고 들여쓰기를 이용해 블록을 구성한다.

다시 한 번 C언어로 예를 들자면 C언어는 if문이나 for문 등을 구분하기 위해 중괄호 를 사용하지만 파이썬은 들여쓰기로 블록을 구분할 수 있다.

(10)

파이썬의 가장 중요한 특징 중 하나는 어떠한 데이터 형식이라도 배열로 구성할 수 있다는 것인데 이 때, 데이터 형식에 구애받지 않고 구성할 수 있다. 그리고 변수를 통 해 함수를 참조할 수도 있다.

(나) 텐서플로우(Tensorflow)

텐서플로우는 구글에서 제작한 오픈소스 소프트웨어 라이브러리로, 데이터 흐름 그래 프를 이용해 수치계산을 할 수 있다.

데이터 흐름 그래프의 노드(특정지점)는 수학 연산을 나타내고 그래프의 가장자리는 이들 사이에서 전달되는 다차원 데이터 배열(텐서)을 나타낸다.

텐서플로우는 파이썬과 같은 기존 언어들과는 달리 a = 1을 선언하면 그 즉시 a 가 1 이 되지 않고, a 가 1이라는 값을 갖도록 계획하는 것이라고 할 수 있다. 이 계획들 은 session(세션)으로 실행할 수 있다.

다시 한 번 텐서와 노드에 대해 설명하자면, 이 계획들(Operation)을 모아둔 것이 노 드(Node)이고, 노드 사이의 연결부위를 엣지(Edge), 이 과정에서 변하고 움직이는 값이 텐서(Tensor)이다.

예를 들면, (X) (+) (Y) = (X+Y) 와 같은 식에서 (X), (Y), (X+Y)는 모두 행렬들을 담은 텐서이고, (+)는 ‘+ 연산을 실행한다.’는 계획을 가진 노드이다.

텐서플로우의 주요기능에는 다음과 같은 것들이 있다.

Ÿ 다차원 배열(텐서)의 정의, 최적화, 효율적 산술 연산 Ÿ 딥 뉴럴 네트워크와 머신러닝 프로그래밍 지원

Ÿ 메모리와 데이터가 자동으로 관리되는 쉬운 GPU 가속 기능 제공 Ÿ 빅데이터 처리를 위한 대규모 병렬 컴퓨팅 지원

(다) DNN/DRNN

입력층-은닉층-출력층의 경우, 다층 퍼셉트론뿐만 아니라, 다양한 인공신경망 구조에 서 공통적으로 존재하는 층이다. 은닉층의 개수가 많아질수록 인공신경망이 ‘깊어졌다 (deep)’고 부르며, 이렇게 충분히 깊어진 인공신경망을 러닝 모델로 사용하는 머신러닝 패러다임을 바로 딥러닝(Deep Learning)이라고 한다. 그리고, 딥러닝을 위해 사용하는 충분히 깊은 인공신경망을 심층 신경망(DNN: Deep neural network)이라고 통칭한다.

일반적으로는 은닉층+출력층이 2개 이상이 되면 심층 신경망이라고 한다.

그리고 당연하게도, 순환 신경망 내에 복수 개의 은닉층을 배치할 경우, 이를 심층 순 환 신경망(DRNN: Deep recurrent neural network)이라고 부른다.

(11)

① 순환신경망의 전체적인 프로세스 순환신경망은 다음과 같이 동작한다.

1.데이터 시퀀스 상의 원소를 매 시점(timestep)마다 하나씩 입력한다.

2.특정 시점(t)에 나온 은닉층의 출력 벡터(이하 은닉 벡터)를, 시퀀스 상의 바로 다음 원소와 함께 입력한다. 아래그림은 순환신경망의 전체적인 프로세스를 나타낸 그림이 다.

그림 5 : 순환신경망 모식도

② 순환신경망의 특정 시점에서의 프로세스 데이터 시퀀스 상의 어느 시점을 t라 하면,

t 의 원소는   ⋯ 이고,   ⋯ 를 완전 연결 신경망에 입력하는 과정에서, 바로 이전 시점은 t−1이다.

이 때, t−1 의 은닉 벡터는       ⋯   이다.

순환 신경망은 t의 원소  ⋯ 와 t-1의 은닉벡터      ⋯    을 함께 입력 하여 가중합 및 활성함수를 적용하는 구조이다.

이렇게 은닉 벡터를 그 다음 시점으로 전달하는 이유는, 앞선 시점들에서의 입력 벡 터 속 정보들이 현재 시점의 은닉 벡터에 누적되어 있다고 간주하기 때문이다. 이 러한 구조의 신경망을 순환 신경망(RNN: recurrent neural network)이라고 한다. 순환 신경망은 실제 데이터 시퀀스에 대하여, 하나의 특정 시점에서는 아래 그림과 같이 작 동하고, 이 프로세스가 시점의 순서대로 진행되는 것이 앞서 설명한 순환신경망의 전 체적인 프로세스이다.

(12)

그림 6 : 특정시점에서의 순환신경망 프로세스

(라) LSTM(Long Short-Term Memory)

LSTM은 RNN의 유닛으로(이때, LSTM으로 구성된 RNN을 LSTM 네트워크라고 한 다.) 일반적인 LSTM의 유닛은 셀, 입력 게이트, 망각 게이트, 출력 게이트로 구성이 된다. 셀은 임의의 시간 간격으로 값을 기억, 세 개의 게이트는 셀 안팎으로 정보의 흐 름을 조절한다.

그림 7 : LSTM 네트워크의 기본 구조

(13)

그림 5에서 주황색 사각형은 NN(Neural Network)의 단위(Layer)를, 노란색 원은 점 단위의 연산( 더하기는 벡터 더하기 연산을, 곱하기는 벡터 곱하기 연산을 의미한다.) 를 의미한다. 그림 5에서 가장 핵심적인 구조는 상단의 수평선으로(

  

를 연 결)이를 셀 스테이트(The cell state)라고 하는데, 아주 마이너한 선형 연산만을 거치고 전체 체인을 관통한다. 이 구조로 인해, LSTM 네트워크에서 정보가 큰 변함없이 계속 적으로 다음 단계에 전달되게 된다. LSTM 네트워크는 RNN 네트워크에 비해 정제된 게이트라는 구조를 갖고 있는데, 이는 정보들이 선택적으로 흘러가게 하는 장치이다.

이들은 각각 시그모이드 뉴럴 네트워크(sigmoid neural network layer)과 점단위 곱하 기 연산으로 이루어져 있다. 시그모이드 레이어는 0혹은 1의 값을 출력하는데, 이는 각 구성요소가 미래에 얼마만큼의 영향을 주는지를 결정하는 역할을 한다. 0은 미래에 아 무런 영향을 주지 않도록, 1은 해당 구성요소가 확실히 미래에 영향을 주도록 하는 것 이다. LSTM의 첫 번째 단계는 0과 1사이의 값을 가지는

  

를 입력값으로 받

아 이를 시그모이드 레이어에 저장하는 것이다. 그다음은 새로운 정보가 셀 스테이트 에 저장 여부를 판단하는 것인데, 첫 번째 시그모이드 레이어(input gate layer)은 업 데이트할 값을 결정하는 역할을 하고, tanh 레이어는 셀 스테이트에 더해질 수 있는 후보 값을 생성하는 역할을 한다. 이 두값을 합쳐서 다음 스테이트에 역향을 주게된다.

이때, input gate layer의 함수식은 다음과 같다.

  

∙ 

  



  

  

로 업데이트 하는 과정은 전 단계(업데이트 할 값을 결정하는 단계)에서

무엇을 할지 결정하였기 때문에, 새로운 후보 값이 기존 값에 영향을 주게 하는 것이 다.

망각 게이트(forget gate layer)의 함수식은 다음과 같다.

  

∙ 

  



  

tanh(-1에서 1의 값을 가진다.)레이어의 함수식은 다음과 같다.

 

 tanh 

∙ 

  



  

새로운 후보 값이 기존의 값에 영향을 끼치는 함수식은 다음과 같다(그림 3참고).

(14)

 

 

  

 

 

마지막으로, 어떤 출력 값을 출력할 지를 결정하는 시그모이드 레이어(output gate layer)를 돌릴 것이다.

출력 게이트(output gate layer)의 함수식은 다음과 같다.

  

∙ 

  



  

결과 값이 반영되는 함수식은 다음과 같다.

 

tanh 

LSTM 네트워크는 Time series 데이터를 기반으로 분류(Classification)와 예측을 하는 데 적합한데, 기존 RNN은 이런 Time series 데이터를 처리할 때, 데이터가 사라지는 문제(vanishing gradient problem)가 일어나기 때문이다. 간격 길이가 길어져도 LSTM 네트워크는 기존 RNN에 비해 상대적으로 둔감하여 문제가 생기지 않는다. LSTM 네 트워크는 자연어 인식, 필기 인식, 음성 인식 같은 경우에 사용된다.

다) 연구 방법

(1) Biaxial RNN(2축 RNN)

Biaxial RNN은 기존 RNN에서 반복되는 연결에서 시간에 따른 패턴은 허용하지만, 각 음의 출력이 다른 음의 출력과 완전히 독립적인 문제를 해결하기 위해 고안된 RNN으로, 2개의 축을 가지는 RNN이다. 하나의 축은 시간(Time axis), 또 다른 축은 음으로 구성(Note Axis)되어 있으며(그래프에서 보이는 또 하나의 축은 가짜 축으로, 그래프의 계산 흐름 방향을 나타낸다.), 각 recurrent layer는 이러한 축 중 하나를 통 해 입력을 출력으로 변환하지만, 변환 과정 속에서 오직 하나의 축만 사용할 필요는 없다.

(15)

그림 8: Biaxial RNN의 다이어그램

그림 7에서 y축은 음을, z축은 시간을 나타내며, 오른쪽으로 가면서 입력이 출력으로 변환되는 것이다. 첫 번째 두 레이어는 시간 축을 통해 연결되지만, 음 축과는 독립임 을 알 수 있고, 반면에, 마지막 두 레이어는 음 축을 통해 연결되지만, 시간 축과는 독 립임을 알 수 있다. 이는 음악의 불변성을 유지하면서, 시간과 음 사이의 패턴을 가질 수 있게 하는 것이다.

(2) 어텐션 메커니즘(Attention Mechanism)

그림 9 : sequence-to-sequence 모델(기계번역에 사용)의 아키텍쳐

어텐션 메커니즘은 딥러닝 모델의 특정 벡터에 주목하게 만들어 모델의 성능을 높이는 기법으로, 기계번역을 위한 모델에 처음으로 도입되었다.

<그림 6>에서 소스 랭귀지 A,B,C를 입력으로 하여 벡터로 만드는 부분을 인코더, 인 코더를 출력한 벡터를 입력으로 해서 타켓 랭귀지 W,X,Y,Z를 출력하는 부분을 디코더 라고 한다. 인코더는 raw data인 소스 랭귀지를 압축하여 모델이 인식하고 학습하기 편한 형태의 벡터로 변형해준다. 디코더는 다시 이 정보를 원래 형태로 변형하여 타겟

(16)

랭귀지로 출력한다. 이를 통해서 그냥 raw data를 입력하는 것보다 더 효율적으로 학 습할 수 있게 된다. sequence-to-sequence 모델의 정확한 구동 방식을 살펴보면 다음 과 같다. 첫 인코더에서 원문의 첫 단어를 입력받아 학습한 후, 여기에서 나온 출력 값 을 다음 인코더의 출력값과 합친다. 이 과정을 반복하여 학습한 최종 출력 값를 디코 더로 보내어 번역문을 출력하게 된다. 그러나 아웃풋의 길이는 인풋의 길이와 같도록 고정되있다는 것과, 소스 랭귀지와 타켓 랭귀지의 길이가 길면 길수록 모델의 성능이 나빠진다는 단점이 있다. 그렇기 때문에, W를 예측할 때 A,B,C 모두를 집중하는 것이 아닌 중요한 부분에만 집중할 수 있도록 해주는 Attention mechanism을 사용하는 것 이다.

Attention RNN은 2014년에 D.Bahdanau가 처음 고안한 메커니즘으로, ‘Neural Machine Translation by Jointly Learning to Align and Translate’논문에서 자세한 내 용을 찾아볼 수 있다. Attention mechanism은 본래 인공지능 번역을 목적을 고안되어, 이를 적용시키면 문장의 전체적인 구조를 파악할 수 있기 때문에 모델의 성능을 높이 는 것이 가능하다.

그림 7 : Attention mechanism

그림 7에서 볼 수 있듯이 Attention mechanism은 sequence-to-sequence 모델에서 사 용한다. 각각의 인코더에서는 각각의 출력 값이 나오게 되는데, attention mechanism에 서는 각각의 출력값에 가중치를 부여한 후 이를 한 개의 일차원 벡터로 합친다. 이 합 쳐진 일차원 벡터는 디코더의 출력 값에 합쳐져서 결국 최종 번역문에 영향을 미치게 된다.

우리는 이 Attention mechanism을 인공지능의 음악 작곡에도 적용을 하면 음악의 전체적인 구조를 파악하여 더 좋은 음악을 생성할 것이라고 생각하였다.

(17)

□ 연구주제의 선정

○ 작년 겨울방학, 우리는 ‘Python 기초 강좌’라는 방과 후 학교 수업을 함께 수강하였다.

그 강좌에서 우리는 Python과 이것을 통한 프로그래밍을 익히면서 프로그래밍에 대한 관심 을 키웠다. 이에 따라서 Python의 인공지능 오픈소스 라이브러리 함수 중 하나인 Tensorflow 에 대해서 관심을 가지게 되었고 이를 이용한 여러 예제들을 접하게 되었다.

제4차 산업혁명 시대의 도래에 따라서, 프로그래밍 및 코딩의 중요성은 물론이고 인 공지능 프로그래밍이 매우 중요한 기술로 자리 잡고 있는데, 인공지능 프로그래밍에 대해 그 원리를 익히고 Python에서 인공지능 라이브러리 함수 Tensorflow가 어떻게 구현되는지 이해한 후, 이를 이용하여 우리만의 Tensorflow와 Python을 이용한 인공지 능 프로그램을 만들어 보고 싶었다.

여러 주제를 생각하던 도중, 우리 연구팀 구성원들의 또 다른 공통점 중 하나인 음악 을 즐겨 듣고 좋아한다는 것을 적용하여 음악을 작곡 하는 인공지능 프로그램을 구현 한다는 주제를 선정하게 되었다.

□ 연구 방법

연구비로 구입한 부품과 기존에 있던 부품을 조립하여 연구용 컴퓨터를 만들었다.

여기에서 GeForce GTX 1070 Ti와 ASRock B85M PRO4, 그리고 ABKO NCORE 아 수라 풀 아크릴 블랙을 구입하였고, 나머지 부품은 기존에 가지고 있던 부품들이다.

CPU Intel 코어 i5-6600

GPU GeForce GTX 1070Ti

SSD Plextor M6V Series (256GB) RAM 삼성전자 DDR4 8G PC4-19200(두 개) HDD Seagate 2TB BarraCuda ST2000DM006 파워서플라이 SuperFlower SF-600R12A NOVA 80PLUS

메인보드 ASRock B360M Pro4

컴퓨터 케이스 ABKO NCORE 아수라 풀 아크릴 블랙

(18)

그림 11

그림 1은 연구용 컴퓨터 조립 후 내부의 사진으로, GPU와 CPU 등의 부품을 볼 수 있다.

연구순서는 다음과 같다.

1) 연구에서 사용할 클래식 데이터 셋을 수집한다.

2) deep jammer 코드를 분석한 후 각 파이썬 파일 혹은 함수들이 어떤 순서로 작동하는지 확인한다.

3) 분석한내용을 바탕으로 attention wrapper를 활용하여 attention mechanism을 적용한 다.

4) 적용한 프로그램으로 얻어낸 midi파일을 악보 변환 프로그램을 활용하여 악보로 변환한 다.

5) 변환한 악보를 기존 클래식 음악가의 악보와 대조해보고 차이점을 분석한다.

□ 연구 활동 및 과정 (1) Deep Jammer 코드 분석

deep jammer의 main 함수는 다음과 같은 시퀀스로 진행된다.

(19)

그림 12 : Deep Jammer 코드 1

deep jammer는 repository handler.py, MusicGenerator.py, plot generator.py, output transformer.py 등의 파일들을 복합적으로 구동시켜야 한다.

Retrieving the repository단계에서는 repository handler를 이용해 학습시킬 repositor 를 설정한다.

그림 13 : Deep Jammer 코드 2

Generating Deep jammer단계에서는 MusicGenerator를 이용해 초기 음악 데이터 셋을 학습시킨다.

(20)

그림 14 : Deep Jammer 코드 3

Training Deep Jammer단계에서는 deep jammer에서 미리 정의해 두었던 train 함수를 이용해 loss함수를 적용하고, 학습시킬 함수를 생성한다. 이 함수를 통해 실제 데이터 들을 학습시키고 세그먼트를 만들게 된다.

그림 15 : Deep Jammer 코드 4

이렇게 만들어진 함수는 Saving Deep jammer단계에서 deep jammer에서 미리 정의해 놓은 save_configuration함수를 이용해 저장한다.

(21)

그림 16 : Deep Jammer 코드 5

main함수의 마지막 과정인 Deep jamming 과정에서는 deep jammer에서 미리 정의해 두었던 save_generated_piece함수를 이용해 세그먼트들을 저장한다.

그림 17 : Deep Jammer 코드 6

그림 18 : anaconda prompt를 통해 실행시킨 deep jammer.py

(2) deep jammer의 활용 이유

한정된 시간 내에 완성도가 높은 프로그램을 제작하기는 쉽지 않다. 따라서 github에 존재하는 오픈소스를 활용하고자 하였다. 많은 음악 작곡 소스들을 찾아보았지만, 대부 분의 자료들은 한 시점에 하나의 음밖에 다루지 못하였다. 하지만, deep jammer는 biaxial rnn을 이용하여 한 시점에 두 개 이상의 음을 다룰 수 있기 때문에 이 오픈소 스를 사용하기로 결정하였다.

(22)

(3) deep jammer의 한계점과 해결방안

deep jammer가 학습할 때에는 time 축과 note 축을 같이 학습하는 biaxial rnn기법을 활용한다. 음악은 시간의 흐름에 따른 변화가 중요하므로 note축 학습만을 진행하는 기 존 rnn보다 biaxial rnn이 더 적합하다고 할 수 있다.

하지만 여전히 한계점은 존재한다. deep jammer는 작은 단위의 세그먼트를 만드는 데 에는 유용하지만, 긴 음악의 특징들을 파악하는 데에는 어려움이 있다.

deep jammer에서는 학습 알고리즘으로 lstm을 사용하고 있는데, 우리는 time 축 학습 을 진행할 때, attention mechanism을 적용하면 좀 더 곡의 흐름에 집중한 학습을 할 수 있다는 가설을 세웠다.

그림 19 : deep jammer 오픈소스 중 music generator 코드

줄 4에서 lstm 기법을 사용하기 위해 theano_lstm 라이브러리에 포함되어있는 StackedCells와 LSTM함수를 import 했으며, 줄 14에서부터 줄 17까지가 time 축 학습 모델, 줄 19부터 줄 20까지가 note 축 학습모델이다. time축과 note축 모두 학습 도구 로는 LSTM을 활용하는 것을 알 수 있으며, note축 활성화함수로는 시그모이드 함수 를 사용하는 것을 알 수 있다.

(4) attention mechanism의 적용

attention mechanism을 적용한 모델과 적용하지 않은 모델에서 얻어낸 output인 midi 파일을 악보로 변환시켜 기존의 음악과 비교하고 또 attention mechanism 적용 여부에 따른 차이도 살펴보았다.

(23)

그림 20 : Attention wrapper

그림 1은 우리가 사용한 Attention wrapper의 일부분이다. 이를 Keras 기반의 LSTM 위에 적용시킬 수 있다.

그림 21 : training model에 적용한 Attention mechanism

(24)

그림 22 : composition model에 적용한 Attention mechanism

Attention Wrapper를 import 시킨 후 TIME_MODEL_LAYER의 LSTM에 적용시켰다.

그림 2에서는 학습을 하는 training model에, 그림 3에서는 최종 작곡을 하는 composition model에 각각 Attention mechanism을 적용한 것을 볼 수 있다. 시간적인 구조를 파악하기 위해 적용한 것이기 때문에 NOTE_MODEL_LAYER에는 적용하지 않았다.

3. 연구 결과 및 시사점

□ 연구 결과

프로그램을 통해 얻어낸 midi파일을 악보변환프로그램을 이용해 악보로 변환하여 epoch값 에 따른 악보변화를 살펴보았다. (악보변환 프로그램이 완전하지 않아 악보로 변환되지 않는 파일이 있어 그 파일들은 제외하여 관찰하였다.)

(25)

그림 23 : epoch = 100인 악보

그림 24 : epoch = 500인 악보

그림 25 : epoch = 1000인 악보

(26)

그림 26 : epoch = 3000인 악보

그림 27 : epoch = 4000인 악보

그림 28 : epoch = 5000인 악보

(27)

그림 29 : epoch = 6000인 악보

그림 30 : epoch = 7000인 악보

그림 31 : epoch = 8000인 악보

(28)

그림 32 : epoch = 9000인 악보

다음은 attention mechanism을 적용한 악보를 살펴보았다.

그림 33 : Attention Mechanism을 적용한 악보

(29)

그림 34 : epoch = 9000인 악보

그림 35 : Attention Mechanism을 적용한 악보

Attention mechanism을 적용시킨 음악과 적용시키지 않은 음악을 비교해봤을 때, 구조 적으로 큰 차이는 없었다. 이런 결과가 나온 까닭에는 몇 가지가 있다고 결론을 내렸 다. 첫 번째는 입력 데이터의 구조적 완전성 때문이다. 음악을 학습시킬 때, 컴퓨터는 효율성을 위해서 몇 마디씩 잘라서 학습을 한다. 그렇기 때문에 음악 전체를 아우르는 구조를 파악하기에는 무리가 있다. 우리의 경우 한 번에 12마디 이상을 학습시키면 메 모리 부족으로 오류가 발생하였고, 이 때문에 우리는 장기적인 구조의 분석은 포기하 게 되었다. Attention mechanism은 본래 완전한 문장을 입력 값으로 받아 구조를 파악 하는 것처럼, 음악도 마찬가지로 한 개의 완결된 곡을 데이터로 사용해야한다. 마디를 몇 개씩 끊어서 입력받는 것은. 한 개의 문장을 여러 개의 구와 절로 나누어서 입력받 는 것과 같은 것이다. 따라서 Attention mechanism의 효력은 미미할 수밖에 없는 것이 다. 두 번째는 메커니즘을 적용시킬 때 세밀한 부분을 신경 쓰지 못하였기 때문이라고 생각한다. Attention mechanism은 encoder/decoder를 위해 고안된 도구이다. 그러나 우 리의 모델은 encoder/decoder가 없는 LSTM 모델이었다. 우리가 Attention mechanism 을 사용할 때 기존의 모델과 우리의 모델의 차이점을 충분히 고려하지 못한 것도 한 가지의 까닭이라고 생각한다. 그럼에도 우리가 Attention mechanism을 사용한 까닭은 고전주의 음악의 단기적인 패턴 파악에 도움을 줄 것이라고 생각하였기 때문이었다.

(30)

그림 36 : 변환한 미디파일 악보 그림 37 기존음악가(베토벤)의 악보

위의 두 음악을 들어보았을 때, 우리가 만든 프로그램이 작곡한 음악이 기존의 음악 에 비해서 부족하게 들린다. 이러한 이유를 우리는 셈여림표, 연주방법, 빠르기말, 페달 기호 등 음악에 있어서 보조적인 부분의 유무라고 결론지었다. 이러한 작곡가가 의도 한대로, 혹은 연주자의 재량에 의해 느낌이 살려지는 부분들이 음악의 감상에 있어서 굉장히 큰 역할을 함은 분명하다.

결론적으로, 우리가 만든 음악에서 가장 부족한 부분은 위에서 언급한 셈여림표, 연주 방법, 빠르기 말, 페달 기호 등이다. 이를 보완하면 더 완성도 높은 음악을 작곡해낼 수 있을 것으로 보인다.

□ 시사점

이 연구에서 우리가 만든 프로그램은 앞서 이론적 배경에서 설명하였던 형식과 문법 이 정해져있는 고전주의 음악, 그중에서도 제시부 – 전개부 – 재현부의 3단 구성으 로 이루어져있는 소나타 형식의 구조 및 형식을 구현하지 못한다. 우리는 처음에 이 프로그램을 통해 16초가량의 음악을 도출해내었고, 이 음악의 길이는 충분히 조절하기 쉬워 4분짜리 음악을 출력해내었을 때도 소나타 형식은 찾아볼 수 없었다. 이는 당연 한 결과였다고 생각한다. 우리가 소나타 형식의 피아노 소나타를 구현하기 위해서는 음악을 출력하는 부분에서 제시부 부분을 먼저 작곡을 한 후, 전개부 부분에 앞의 제 시부를 확장시키고 고조시켜 작곡을 하도록 설정한다. 또 재현부는 앞의 제시부를 반 복하되 끝맺음이 있게 작곡하도록 설정하며, 그 각 부분들 사이에 연결부를 넣어주는 형식으로 작곡을 해야 할 것이다. 이는 시간상으로 부족하였기에 이러한 부분을 완성 하지 못했다.

(31)

이에 따라서 소나타 형식의 고전주의 음악을 사용한 이유가 불분명해질 수 있다. 그 러나 우리는 음악을 분석하는데 형식과 문법이 갖추어진 음악인 소나타 형식의 음악이 분석하기에 더 적합한 음악이라고 생각하였고, 이에 고전주의 음악의 사용에 대한 의 의를 두고자 한다.

4. 홍보 및 사후 활용

먼저 우리가 이 연구를 진행한 이유 중 하나는 앞서 연구 목적에서 언급한 바와 같이 클래식 음악의 대중화와 클래식 음악이 지니는 단점을 보완하기 위함이었다. 우리가 만든 프로그램 이 현재는 Midi 파일을 이용하여 조금은 부족해 보이는 음악이 나올지 몰라도, 좀 더 보완한다 면 충분히 위의 목적을 수행할 수 있는 프로그램이 될 수 있을 것이다. 후속 연구를 진행할 기회가 생긴다면, 결론 및 한계점에서 말한 아쉬운 점들을 보완하고 더 좋은 프로그램을 만든 후, 이를 상용화하여 많은 사람들이 이용할 수 있도록 하고자 한다.

5. 참고문헌

∙ 김성진(2018), 코딩 셰프의 3분 딥러닝, 케라스 맛 : Keras 코드로 맛보는 ANN, DNN, CNN, RNN, AE, GAN, UNET, 한빛미디어

∙ 비피기술거래(2018), 한권으로 끝내는 텐서플로 AI와 머신러닝 개발하기, 비피기술 거래

∙ 윤양석(1987), 음악의 이해, 숙명여자대학교출판부

∙ Ashish Vaswani, Noam Shazeer, Lukasz Kaiser(이하 Google Brain 소속), Niki Parmar, Jakob Uszkoreit, Llion Jones (이하 Google Researh 소속), Aidan N. Gomez (토론토 대학, College of Toronto), Illia Polosukhin(2017), Attention is All You Need, Cornell University Library, Retrieve from : arXiv.org

∙D.J Grout(1986), A History of Western Music, 서우석 외 옮김, 삼호출판사

∙ 고전주의 음악 Midi 파일 데이터셋 : http://www.kunstderfuge.com/

∙ Deep Jammer : A Music Generation Model (Justin Svegliato, Sam Witty, College of Information and Computer Sciences, University of Massachusetts Amherst)

∙ Deep Jammer

https://github.com/justinsvegliato/deep-jammer

https://towardsdatascience.com/can-a-deep-neural-network-compose-music-f89b6ba4 978d

∙ LSTM

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

참조

관련 문서

우선 기획단계에는 건설공사에 대한 기본구상을 하고, 건설공사현장을 사전조 사하며 이를 토대로 사업계획을 수립하는 단계이다. 일반적으로 기획단계에서는 발주자가

경우 GPS 위성과의 기하적인 GPS 위치계산 정도에 영향을 주 게 되는 것이다 뿐만 아니라 위성의 배치가 그림. 2 살펴본 바와 같이 부분적인 오차와 체계오차는

타조는 햇빛이 그들의 새끼 들을 아프게 하는 것을 막기 위해 날개를 사용할 수 있다.. 그들의 날 개의 깃털은 또한

내가 생각하기에 요즘 아이들은 내가 학교 다닐 때보다도 더 많은 공부를 하고 있다.. 공부 하는 시간도 많아진 것 같고 , 수면의 시간이

Tighting the screw too much can damage the terminals and cause short circuit

그림 7.19 양서류 배아의 이식과 재조합 실험은 예정 등쪽 원구입 술 부위의 바로 아래에 위치한 식물세포가 낭배형성의 시작을 담당

그림 7.19 양서류 배아의 이식과 재조합 실험은 예정 등쪽 원구입 술 부위의 바로 아래에 위치한 식물세포가 낭배형성의 시작을 담당

여자노비로 태어나 어려서 부터 여자의 복식을 하고 바느질을 배우며 자랐으나, 이순지(李純之)의 딸 이씨와 수년 째 간통행각을 벌이다 덜미가 잡힌 인물이었다.. 당시