'Genetic Algorithm'에 해당되는 글 1건

  1. 2007/10/02 Hybrid 즉흥 재즈 연주를 하는, Genetic Jammer, GenJam!!!! (6)
오랜만에 Genetic Algorithm/Programming 쪽으로 검색하던 중에, 우연히 아주아주 신기한 것을 찾았다.(사실 오타를 내서 검색했는데, 마침! 본문에도 오타가 있던 것...)

정식 명칭은 Genetic Jammer, 약어는 GenJam. 이렇게 설명하고 있다.[1]

GenJam (short for Genetic Jammer) is an interactive genetic algorithm that learns to play jazz solos.

결국 재즈 솔로 연주를 하는 것인데, 그 능력이 대단하다. 저자와 GenJam 이 서로 연주를 하고 거기에 믹싱을 섞은 동영상을 공개했다. 본래 링크에 있는 17메가의 동영상(Quicktime movie)을 티스토리로 옮겼다.


배경 음악은 따로 연주되는 것이고, 먼저 사람이 재즈 연주를 한다. 그 다음에 GenJam 이 그것에 맞춰 다시 연주하고 번가라가며 연주를 한다. 사람이 연주를 하지 않으면 GenJam 이 연주를 하게 되는데, 그때 사람이 치고 나가면 GenJam 은 자연스럽게 물러서기도 하고, 같이 연주하기도 하며, 그때그때 상황에 따라 아주 자연스럽게 적응한다. (개인적으로 첫번째 연주보다는 나중 연주가 훨씬 멋있는거 같다. 첫번째 연주는 다소 지루...)

중요한건, 재즈라고 해서 아무렇게나 연주하는 것이아니라, 사람의 연주를 적응하고 따라한다는 것이다. 굉장하다!

솔로 연주를 4마디나 8마디씩 번가라가며 연주하기도 하고, 짧막하게 사람의 연주를 딜레이를 주어 따라 연주하기도 하고, 같이 코러스를 넣기도 한다.

단순한 재즈 연주를 할 수 있다는 것은 알았지만 사람의 연주를 이렇게 적응하고 같이 연주하리라고는 전혀 생각하지 못했다. 그것도 Genetic Algorithm 을 이용하다니!! 다시한번 Genetic Algorithm/Programming 의 힘에 놀라는 중이다.

ps. SIGGRAPH 의 최신 기술의 동향만 살피는 것만해도 너무 정신 없어서 제대로 따라가지 못하고 있는데, Genetic and Evolutionary Computation Conference 까지 관심을 두기에는 너무 정신이 없다. 이쪽도 그래픽 만만치 않게 놀라움에 연속이라... 쩝...

  1. 이 GenJam 의 사이트는 http://www.it.rit.edu/~jab/GenJam.html 이다. GenJam 과 관련된 설명과 관련된 좋은 링크들이 많다. GenJam: Evolutionary Computation Gets a Gig 이라는 제목의 논문도 공개되어 있다. [본문으로]
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/10/02 13:14 2007/10/02 13:14

트랙백 주소 :: http://www.hybrid.pe.kr/tt/trackback/269

댓글을 달아 주세요

  1. soloture 2007/10/02 20:21  댓글주소  수정/삭제  댓글쓰기

    진짜 똑똑한 녀석이네요. 처음 연주보고는 코드진행이랑 상대 연주자 즉흥연주에 맞춰서 그걸 변형하거나 내장되있는 프레이즈의 조합으로 표현하는 정도인줄 알았는데 두번째 보싸노바곡은 진짜 사람같네요-_- 어떻게 만든거지..

    • Hybrid 2007/10/03 00:50  댓글주소  수정/삭제

      정말 신기하지 않나요?
      이거 보고 너무 신기해서 혼자서 웃었습니다. GenJam 에 대한 논문을 출력해놨으니, 시간내서 읽어봐야겠습니다.

  2. 호모사피엔스 2007/10/03 10:41  댓글주소  수정/삭제  댓글쓰기

    genetic algorithm/programming이란 무었인가요? 소개좀 해주세요^^:.

    • Hybrid 2007/10/03 11:23  댓글주소  수정/삭제

      둘이 조금 다르고 자세히 보면 방법이나 적용범위가 꽤 많이 다르지만, 효과와 원리 기본적인건 비슷해서 구분하지 않고 말씀드리면요..

      그러니까 자연이 진화하는 것을 그대로 모태로 삼은 알고리즘입니다. 한번에 원하는 솔루션이 나오는게 아니라, 자연이 crossover 를 하던가, mutation 을 하는 것을 그대로 모방해서 점점 원하는 조건에 적응하는 알고리즘입니다. 여기서 자연선택(natural selection)이 핵심적이죠. 점점 세대가 넘어가게 되는데, 그 과정에서 적응하는 개체를 살려두고 적응하지 못하는 개체는 죽이는 것입니다.

      기본적인 개념은 이게 끝인데, 빠른시간안에 계산이 되는 것도 아니라서 사실 무조건 적용하기에는 상당한 무리가 있습니다. 여기서는 정확하게 어떻게 사용된지는 모르겠습니다만.... 아마도, 사람의 음악을 듣고, 그걸 내부적으로 비슷한 개체를 많이 만들어 내고.... 거기에 또 다른 음악을 들으면 그 많은 개체중에 비슷한 개체들을 살리고 나머지는 죽이는... 그렇게 하다보면, 사람도 일종의 패턴이 있으니까, 그 패턴을 따라갈 수 있게되지요.

      말로 하기는 그나마 쉬운데, 이걸 어떻게 인식할것인지.. 이건 쉽지 않은 문제인데다가.... 내부적으로 여러가지 변수들이 있습니다.
      저는 이정도 추측만 하고 그냥 놀라움에 입벌리고 감상하는거죠. ㅡ0ㅡ; ㅎㅎ

  3. 호모사피엔스 2007/10/03 18:46  댓글주소  수정/삭제  댓글쓰기

    코드가 스스로 진화한다는 건가요? 어떤식으로 변화를 주는 것인지 궁금하네요. brainew.com의 chopin님의 evbrain이라는 프로그램이 그런 가상의 진화환경을 통해 뇌를 진화시키려는 노력의 일환입니다. 이는 신경망과 유전자를 모방했던데.. 흥미롭더군요.
    이런 컴퓨터를 통한 진화실험은 진화생물학연구에 많은 도움을 주는 것으로 알고있는데, 컴퓨터 프로그래밍자체에도 활용이 가능하다니 놀랍네요.

    • Hybrid 2007/10/03 21:16  댓글주소  수정/삭제

      그 코드가 길이가 고정이면 Genetic Algorithm, 가변이면 Genetic Programming 이라고 보면 일단 기본 분류는 맞습니다. GA는 보통 개체의 특성을 스트링으로 나열하고 각 파라미터(스트링의 문자=개체의 특성)를 바꾸는게 그 과정이고, GP는 개체가 트리 구조로 있어서 가변적이고 훨씬 복잡하게 둡니다. GP의 경우 실제 프로그래밍이 이루어지기도 하지요. (제가 몇일 전에 올렸던 포스팅이 간단하게 프로그래밍된 예제입니다.)

      가령, GA의 그 스트링을 DNA라고 보시면 자연과 거의 같습니다.(물론 자연은 그 문자가 ATCG 4가지 뿐이지만, GA에서는 문자가 될 수도 있고 정수, 실수 등 마음껏 지정할 수 있습니다.) 시뮬레이션에서는 몇십, 몇백 세대를 거치면서 서로 메이팅하는 과정에서 DNA 의 crossover 와 mutation 에 의해 변형되면서 자연선택으로 인한 진화를 하게 됩니다.

      brainew.com 은 저도 한때 가서 많은 도움을 받은 곳입니다. ALife 쪽에서 기웃거리면서 열심히 질문도 하고 했었죠.. ㅎㅎ

[로그인][오픈아이디란?]