MORIKAWA

森川くん、人工知能の本をここで再編集。

<人工生命#2>

今回は、前回の「Lシステム」を使った
自動作曲の第二回目です。
人工生命的アプローチというくらいですから、
進化というか、増殖と淘汰とか、
そういう生き物くさいところもみせてほしいところです。
そこで、思い出すのが進化をモデルにした
AIの「遺伝的アルゴリズム」ですね。
実際に「人工生命」の世界では、
「遺伝的アルゴリズム」は
当たり前のように利用される仕組みです。
そこでここでもそれを使ってみることにします。
このように、二つ三つのAIや、
その周辺のモデルを組み合わせて使うという手法は
よく利用されます。
さて。
ここでは、1つ作曲の仕組みを1つの生き物
(個体なんて言い方しますが)として捉えます。
そして、たくさんいる個体の中で、
もっともイイ音楽を奏でる個体が、
交配して子孫を残していく、
そしてイイ音楽を作っていく、そういうもくろみです。
「イイ音楽って、何?」なんて
野暮は言わないでくださいね。


以下、「マッチ箱の脳」の「ニューラルネットワーク」より抜粋

<Lシステム#2/2>

前回紹介した、音が展開していくルール

◆1回目 ド
◆2回目 ミ、レ、ファ
◆3回目 ミ、ド、ソ、シ
◆4回目 ミ、ミ、レ、ファ、レ、ラ、シ
◆5回目 ミ、ミ、ド、ソ、シ、ド、ファ、シ
◆6回目 ミ、ミ、ミ、レ、ファ、レ、ラ、シ、ミ、レ、
     ファ、ソ、シ、シ
◆7回目 ミ、ミ、ミ、ド、ソ、シ、ド、ファ、シ、ミ、
     ド、ソ、シ、レ、ラ、シ、シ
◆8回目 ミ、ミ、ミ、ミ、レ、ファ、レ、ラ、シ、ミ、
     レ、ファ、ソ、シ、シ、ミ、ミ、レ、ファ、レ、
     ラ、シ、ド、ファ、シ、シ



●LシステムでGA作曲
前述の例からわかるように、
このシステムはルールが命です。
上のルールは、適当に作ったものですが、
こうしたルールをもっと合理的に、
効率よく作れたら面白いかもしれません。
とはいっても、先々の展開を頭の中で
計算しながら作るというのは大変そうですね。

そこで、このルールを、
GAを使って作り出そうという研究があります。
GAを使うのですから、
各音が次に何に変わるかが遺伝子となります。

そして、GAにおける遺伝子は基本的には
数字0と1で表現しなくてはなりません。 

ですから、音符のド〜シや休符も
0と1で書き表すことになります。
例えば、次のようにです。

◆000 なら 休符
◆100 なら ド
◆010 なら レ
◆001 なら ミ
◆110 なら ファ
◆101 なら ソ
◆011 なら ラ
◆111 なら シ

この定義に従って、
レ→<ミ,レ,ファ,休符>を0と1で書き表すと、
<010>→<001,010,110,000>となります。

遺伝子は、
<最初の音は何か>、<ドが何に変わるか>〜
<シが何に変わるか>、<休符が何に変わるか>
という構造になっています。

つまり、遺伝子全体では、
3+12×8=99個の0か1で
書き表されることになるわけです。

●GAでメロディを奏でる

さて、上の大前提では、ステップごとに4倍、
4倍と音階が増えていきますから、
ほおっておくと、
とんでもなく長い音楽になってしまいます。
そこで、ここでは、
3回だけ分裂する(合計64音符になる)だけとします。

で、この生まれたばかりの
64音符の音楽(?)をどうするか、です。
GAは、個体の成績を比べて優秀なら子孫を残せ、
ダメなら淘汰されるというシステムでした。
ですから、できあがった音楽の
評価をしなくてはなりません。

本当は、その音楽が良いか、
悪いかを採点することは大変難しいことですが、
ここでは、次のように
ざっくりと決めてしまうことにします。

一般的に言って、こういったランダムに作られた音楽は、
音と音の間がひどく飛びます。
これがデタラメ、機械的に聞こえてしまう
大きな要因の一つです。
逆に、音と音の間がきれいにつながっていると、
音楽っぽく聞こえます。
また、ある程度トーンが整っている方が、
一般的に音楽っぽいということです。

以上のことから、
前の音と音程が離れているほど評価が低い、
また、メジャー調のトーンにするという意味から、
ファとシの音があるとマイナスとしてみましょう。

これをまとめて、以下のような評価基準を作りました。

◆評価1:基本点100点
◆評価2:前の音と同じ音だったら それごとに  0点
◆評価3:前の音と1度違っていたら それごとに+30点
◆評価4:前の音と2度違っていたら それごとに+15点
◆評価5:前の音と3度違っていたら それごとに−10点
◆評価6:前の音と4度違っていたら それごとに−15点
◆評価7:前の音と5度違っていたら それごとに−20点
◆評価8:前の音と6度違っていたら それごとに−30点
◆評価9:その音がファもしくはシだったら   −10点

ただし、休符がある場合は、休符の前の音と、
休符後の音の関係を上のルールに当てはめます。

例えば、音階が
<ド,ファ,ミ,ド,休符,レレ,ラ>
だったとします。
すると、上のルールから
各音の採点は次のようになります。

◆基本点=100点
◆ファは前の音ドと3度違っているので −10点
◆ファは                  −10点
◆ミは前の音ファと1度違っているので +30点
◆ドは前の音ミと2度違っているので +15点
◆レは(休符の)前の音ドと1度違っているので +30点
◆レは前の音レと同じ音なので 0点
◆ラは前の音レと4度違っているので −15点

この結果、この音階の成績は、
100−10−10+30+15+30+0−15=130点
となります。

かなりいいかげんな採点基準ですが、
ま、このようにして作られた曲を採点し、
それを各遺伝子の成績とします。

このようにして、自動作曲ができあがります。

以上の自動作曲は、
説明のため簡単な仕組みにしてありますので、
半音もオクターブの概念も、音符の種類もありませんし、
評価の基準もかなり貧弱ですので、
曲と呼べる代物にできあがらないかもしれません。
ただ、大まかな仕組みは理解していただけたと思います。

実際にこれで作曲してみようと思われる方は、
上のルールや評価の基準に、
もっとたくさんの音楽的法則にのっとった要素を
付け加えてみてください。

1つの音から決められた音に変化するのではなく、
<1度上の音,1度下の音,休符,そのまま>
のように分裂するという「ルール」自体を遺伝子としても
面白いかもしれません。

●GA作曲はモーツアルトを超えられるか?
 
さて、勘のいい方なら、
次のようなことにお気付きかもしれません。
各音が分裂するルールを遺伝子に載っけるくらいなら、
はなっから1曲分の音を
遺伝子に直接載っけた方が手っ取り早いんじゃないかと。

例えば、4つの音符で曲を作るというルールとしましょう。
それでしたら、
<1つ目の音,2つめの音,3つ目の音,4つ目の音>
が遺伝子になっていればいいわけです。

前述のルールでいうと
<010,001,001,110>
という遺伝子は、
<レ,ミ,ミ,ファ>
という音階を表していることになりますからね。
確かにこの方が、
後からルールを分裂させる手間が省ける分、
都合がいいように思えます。

しかし、こうして作ったものは、
あまり良いメロディには到達できないことが
わかっています。
一般的には、ダイレクトに
構造や数量を遺伝子として表現してしまうよりも、
ルールを組み込んだ方がいいようです。
それは、我々の細胞が細胞分裂を繰り返して
複雑な構造に成長していくときに、
「分裂」のルール自体を
遺伝子に持っているということと同じかもしれません。

以上が、Lシステムの大まかな仕組みでした。
ここでは自動作曲をイメージしましたが、
一般には、木の成長を表現する際などに
利用されることが多いです。
どの音がどの音とどの音に分裂する、
というイメージを枝分かれのイメージに置き換えると、
非常に自然な木の茂みを表現することができるわけです。

2001-07-22-SUN

BACK
戻る