
「虹機械」機械学習実験ノート(1)
1.はじめに
本稿では、三輪眞弘さんの作品、『「虹機械」はじまりのうた』および『「虹機械」公案-001』を素材にしてPythonのライブラリPyTorchのLSTMモデルを用いた模倣の実験を行い、模倣ができることを確認できたので、その結果を報告します。今回、時系列データの機械学習のために用いたリカレント・ニューラルネットワークについては既にWeb、書籍等で様々な解説が行われているので、説明はそちらに譲ることにして、ここでは具体的にどのタイプのリカレント・ニューラルネットワークを使って、どのようなモデルを構築して、どのように訓練をしたかを報告することにさせて頂きます。
2.実験のデザイン
2.1.実験の目的
今回の実験以前に、三輪さんの『「虹機械」はじまりのうた』を素材としたGoogle Magentaのmelody RNNモデルを用いた模倣の実験をGoogle Colaboratory上で行っていました。ところがGoogle Colaboratory上でのMagentaのインストールが、依存しているライブラリの整合性の問題で失敗するようになり、実験の継続ができなってしまったため、その代替として、自分でプログラムを作成して、Google Colaboratory上でMIDIファイルから必要なデータを抽出し、簡単なニューラルネットワークモデルを構築して機械学習の実験を再開できる環境構築を行いました。そこで中断していた実験を継続し、まずは新たに構築した環境で「虹機械」の模倣ができることを確認しようと企図したものです。
2.2.対象データ
実験の素材として用いた『「虹機械」はじまりのうた』および『「虹機械」公案-001』は基本的に「単旋律」です。旋律とはいっても歌謡のような滑らかな声部進行ではなく、ピアノで弾き通すにはヴィルトゥオジティが要求される跳躍進行を含む16分音符の高速なパッセージの連続ですが、譜面上は或る時点で鳴っている音は常に単音です(但し、休符は含まれます)。リアリゼーションにあたってはサステインペダルの指示によって「音響」の水準で音が重なった状態になる箇所がありますが、ここでは休符を含めた音の状態遷移系列を対象とします。
2.3.入力データの準備
そこでまず、作品のエミュレーション結果のMIDIファイルから、休符を含めた音の系列を抽出することにします。前回はMagenta任せでしたが今回は以前自作して、マーラーの作品の分析でも使用してきたMIDIファイルを解析するCのプログラムを使用し、ピアノロール形式(各時点――『「虹機械」はじまりのうた』『「虹機械」公案-001』とも16分音符が基本単位ですので16分音符単位で――MIDIノート0~127のうち鳴っていない音は0、鳴っている音は1を値とするベクトルで表現し、このベクトルを時系列に沿って並べたマトリクスの形式)のデータを作成して、これを入力として用い、ピアノロール形式のデータから休符を含む音の系列を抽出することにしました。ピアノロール形式のデータでは休符の箇所はMIDIノート0~127を表すベクトルの全ての要素が0ですが、一次元の音の系列に変換するにあたり、休符には一旦、0~127以外の任意の値(例えば128)を割り当てることにしました。
2.4.入力データ形式
次にニューラルネットへのデータの与え方ですが、前回もそうであったように、ここでの実験の最初の目的は所謂「学習」ではなく「模倣」です。「虹機械」の規則の学習にあたって、まずは原曲の音の系列を正しく再現できるかどうかを問題にするので、訓練用のデータセットと検証用のデータセットを分けることはせず、原曲を上記の入力系列長と次の1音の正解出力という形にして訓練を行うことにしました。例えば「虹機械 公案-001」の冒頭から16ステップ分のMIDIノートの系列を示すと以下のようになります。
[61, 53, 68, 61, 73, 66, 90, 71, 59, 76, 52, 59, 71, 76, 68, 63, …]
ここから入力の系列データ(系列長=4)と出力の正解データの対を以下のように作成していきます。
[61, 53, 68, 61]→73
[53, 68, 61, 73]→66
[68, 61, 73, 66]→90
[61, 73, 66, 90]→71
[73, 66, 90, 71]→59
[66, 90, 71, 59]→76
[90, 71, 59, 76]→52
[71, 59, 76, 52]→59
[59, 76, 52, 59]→71
[76, 52, 59, 71]→76
[52, 59, 71, 76]→68
[59, 71, 76, 68]→63
…
このようにして作品の全系列についてデータを作成します。系列長-5の入力データ→正解データのペアができ、これを1回通すのを1エポックとします。「虹機械 公案-001」が390小節あるのに対し、「虹機械 はじまりのうた」は260小節+1音(いずれも1小節に16分音符16個)で、作品の規模は「公案-001」が「はじまりのうた」の1.5倍の系列長を持ちますが、この割合はそのまま入力データの1エポックあたりのパターン数の割合になります。
2.5.ニューラルネットワークのデザイン
2.5.1.ネットワークモデルの選択
次にどのようなニューラルネットワークモデルを用いるかを検討します。モデルとしては、「虹機械」が状態遷移機械であることから、ごく素直に直観的に、一定の長さの(休符を含む)音の系列に含まれる音を順次与えて次の音を予測し、正解データと照合して訓練するというものを考えます。時系列データの学習に適したニューラルネットワークモデルとして従来から研究されてきたものとして、リカレントネットワークがあります。例えばMagentaではmelodyRNNというモデルを使用しましたが、これはLSTMと呼ばれるリカレントネットワークの拡張版を用いて実装されていました。近年はリカレントネットワークではなく、Attentionというメカニズムを用いた手法が提案され、自然言語処理などの分野にブレイクスルーをもたらしましたが、ここではまずはごく基本的なメカニズムを用いた実験を行うことにし、LSTMを用いることにします。
ニューラルネットワークには幾つかのハイパーパラメータがありますが、今回用いるLSTMのハイパーパラメータは以下のように設定しました。
2.5.2.ネットワークの層数
入力層・隠れ層・出力層の3層とします。
2.5.3.各層の構造とノード数
ここでの問題は、一定の長さの(休符を含む)音(MIDIノートないし休符を表すトークン)の系列を順次与えて、次の音を予測させる場合に、出現しうるMIDIノート(と休符)のうち、どれが最も出現する確率が高いかを訓練により学習することです。この点を踏まえて以下のようにニューラルネットワークの構造と各層のノード数を決定しました。
(a)入力層
入力として与える系列の長さについては、前の音と今の音から次の音を決めるという「虹機械」の基本的な状態遷移規則を念頭におけば長さ=2で十分な筈ですが、現実の作品は基本的な状態遷移規則だけが用いられているわけではありません。(この点については、例えば記事「「POC#20」にて三輪眞弘ピアノ作品を聴いて」の関連個所を参照頂ければ幸いです。)一方でリカレントネットワークは時間方向に展開して逆伝播を行いますが、展開する時系列が長くなり、層が深くなるにつれて勾配の誤差が積み重なってしまう、いわゆる「勾配消失」「勾配爆発」の問題があることが知られています。今回採用したLSTMはまさにその問題に対処するために改良されたものなのですが、系列長が長くなるにつれて学習が困難になり、また時間がかかるようになる点は変わらないため、まず系列長=4で実験を行い、その後比較対照のために、系列長=2の場合と系列長=8の場合についても実験を行う事にしました。
(b)出力層
出力層の各ノードを出現しうるMIDIノートと休符に対応づけ、それらのノードに対してsoftmax関数を用いることにしました。従って入力層のノード数は1とし、出力層のサイズは、対象となっている作品で出現しうるMIDIノートの最大値-最小値+2(休符用のノードが必要になるため)になります。
(c)隠れ層
隠れ層のサイズは一般に、対象とするデータや問題依存であり経験的に決定するものとされていますが、ここではMagentaではmelodyRNNのデフォルト値が128でしたので、それを参考にして128で実験を行って、その結果により、必要に応じて調整を行うことにしました
2.5.3.損失関数・オプティマイザ・学習率
損失関数、オプティマイザについてはそれぞれ一般的に用いられている交差エントロピー、ADAMを用い、学習率も一般的な設定である0.001で実験を行うことにしました。
2.5.4.訓練のエポック数
訓練の打ち切り基準についても一般に、対象とするデータや問題依存であり経験的に決定するものとされています。この実験では、lossの大きさにより訓練の進み具合を判断することとし、3000エポック、5000エポック、10000エポックといった区切りにおいて概ね0.3程度まで下がったら一旦訓練を打ち切り、評価を行うことにしました。ただし訓練の経過から、lossが目安である0.3まで下がることが期待できない場合には10000エポックで訓練を打ち切って中断することにしました。
2.6.評価方法
評価については、ここでの実験の最初の目的が原曲の音の系列を正しく再現できるかどうかを確認することにあり、評価用のデータセットを別に用意していないので、訓練用に用意したデータの中から、以下の2種類の条件で行いました。
(再現実験)作品冒頭を入力として次の音を予測させる。予測された音を入力列の末尾に加えて、先頭を1ステップずらして、更に次の音を予測させる。これを32回ステップ(16分音符32個=2小節)繰り返す。
(生成例)ランダムに開始位置を決めて、作品系列の任意の一部を入力として次の音を予測させる。以下、再現実験と同様の手順を繰り返す。
繰り返しのどこかで原曲とは異なる音が生成されれば当然その後の音の系列は異なったものになります。但し、既述の通り、元の作品も、基本的な状態遷移規則のみに基づいて構成されているわけではありませんし、訓練の打ち切り基準をl比較的緩めに、loss=0.3程度に設定していることもあり、今回の実験については、原曲の音の系列を正しく再現できているかどうかは、32回ステップの範囲で間違った音が生成されていないかどうかで判定することにし、作品系列の任意の一部を入力とした時の予測が正しいかどうかについては確認するのみに留めることとしました。実験の目的からすればオーバーフィッティング(過学習)について気にする必要はないため、lossが更に下がるまで訓練を継続すれば更に再現精度が向上することも期待できますが、その点の確認は今後の課題です。
結果の検証は基本的にはMIDIノートの系列の比較によって行いましたが、結果を記録するにあたってはMIDI形式およびwav形式での保存をして、結果を聴いて確認できるようにしました。
3.実験環境の構築
実験のデザインについては以上とし、次に実際に構築した実験環境について述べます。前回同様、機械学習の実験にあたりGPUを利用したいので、今回もGoogle Colaboratory上で実験を実施することにしました。Google Colaboratory上でLSTMのモデルを構築するにはPythonの機械学習用のライブラリを利用することができますが、例えば巣籠悠輔『詳解 ディープラーニング 第2版』(マイナビ出版, 2019)に紹介されているように、利用可能なライブラリにはTensorFlow/Keras、PyTorchといった選択肢があります。近年出版された音楽に関する機械学習についての著作の中で、北原鉄朗『音楽で身につけるディープラーニング』(オーム社, 2023)ではTensorFlow/Kerasを、シンアンドリュ―『深層学習による自動作曲入門』(オーム社, 2024)ではPyTorchを用いているようですが、ここではPyTorchを用いることにしました。
以前と異なり、2024年現在、Colaboratory Pro環境では利用するGPUモデルが選択できるようになっており、選択肢としては、標準のT4以外にL4、A100に加え、Googleが開発した機械学習用のアクセラレータTPU(Tensor Processing Unit) v2がありますが、今回の問題は規模がそれほど大きくないため、標準のT4で実験を行いました。
結果の保存についてはまずPrettyMIDIライブラリを用いてMIDI形式での表示・保存を行ったあと、fluidsynthおよびmidi2audioライブラリを用いてwav形式に変換・再生を行えるようにしました。
4.実験の実施条件
訓練は既述の実験デザインに基づき、以下の条件で行いました。
A.「虹機械 はじまりのうた」
A-0.主実験:入力文字列長=4, 隠れ層のサイズ=128, 学習率=0.001
A-1.比較実験1:入力文字列長=2,隠れ層のサイズ=128, 学習率=0.001
A-2.比較実験2:入力文字列長=8 隠れ層のサイズ=128 学習率=0.001
A-3.比較実験3:入力文字列長=8 隠れ層のサイズ=256 学習率=0.001
B.「虹機械 公案-001」
B-0.主実験:入力文字列長=4 隠れ層のサイズ=128, 学習率=0.001
B-1.比較実験1:入力文字列長=2,隠れ層のサイズ=128, 学習率=0.001
B-2.比較実験2:入力文字列長=8,隠れ層のサイズ=128, 学習率=0.001
5.実験の結果
実験結果を以下に示します。なお生成例・再現実験の結果の-1は休符を表します。
訓練に要する処理時間ですが、作品の規模により異なり、入力系列長や隠れ層のサイズにより異なりますが、いずれもT4 GPUを使用して数十分で完了しました(最長は、「虹機械 はじまりのうた」の比較実験3で約70分)。当然のことですが、入力系列長が長くなれば処理時間が増大するし、隠れ層のサイズが大きくなれば処理時間が増大します。また既に述べた通り、「虹機械 公案-001」が390小節あるのに対し、「虹機械 はじまりのうた」は260小節+1音(いずれも1小節に16分音符16個)で、作品の規模は「公案-001」が「はじまりのうた」の1.5倍の系列長を持つことから、1エポックあたりのサンプル数も1.5倍あるのに応じて、処理時間も増大します。
A-0.「虹機械 はじまりのうた」主実験:入力文字列長=4, 隠れ層のサイズ=128, 学習率=0.001
Epoch数=3000 → loss=0.3996
Epoch数=5000 → loss=0.2829:再現=〇。
生成例:primer=[56, 75, 82, 46]
予測結果(〇):
[77, 84, 72, 77, 84, 79, 55, 60, 72, 77, 29, 82, 51, 80, 75, 39, 82, 77, 65, 84, 77, 84, 60, 55, 67, 84, 36, 77, 58, 75, 80, 44]
正解:
[65, 77, 72, 79, 84, 77, 53, 58, 70, 75, 27, 82, 51, 80, 75, 39, 70, 82, 65, 84, 79, 84, 60, 53, 65, 82, 34, 75, 58, 75, 80, 44]
[77, 84, 72, 77, 84, 79, 55, 60, 72, 77, 29, 82, 51, 80, 75, 39, 82, 77, 65, 84, 77, 84, 60, 55, 67, 84, 36, 77, 58, 75, 80, 44]
[77, 84, 72, 77, 84, 79, 55, 60, 72, 77, 29, 82, 51, 80, 75, 39, 82, 77, 65, 84, 77, 84, 60, 55, 67, 84, 36, 77, 58, 75, 80, 44]
[77, 84, 72, 77, 84, 79, 55, 60, 72, 77, 29, 82, 51, 80, 75, 39, 82, 77, 65, 84, 77, 84, 60, 55, 67, 84, 36, 77, 58, 75, 80, 44]
再現実験:primer:[71, 82, 69, 73]
予測結果(〇):
[84, -1, 69, -1, 82, -1, 84, -1, 71, 69, 84, -1, 76, 78, 74, 78, 77, -1, 74, -1, 77, -1, -1, -1, 76, 74, 79, -1, 69, 73, 69, 71, 82, -1, 67, -1]
正解:
[84, -1, 69, -1, 82, -1, 84, -1, 71, 69, 84, -1, 76, 78, 74, 78, 77, -1, 74, -1, 77, -1, -1, -1, 76, 74, 79, -1, 69, 73, 69, 71, 82, -1, 67, -1]
A-1. 「虹機械 はじまりのうた」比較実験1:入力文字列長=2,隠れ層のサイズ=128, 学習率=0.001
Epoch数=3000 → loss=2.0864
Epoch数=5000 → loss=1.8669
Epoch数=10000 → loss=1.6362:中断。
A-2. 「虹機械 はじまりのうた」比較実験2:入力文字列長=8 隠れ層のサイズ=128 学習率=0.001
Epoch数=3000 → loss=0.2947
Epoch数=5000 → loss=0.1319:再現=×。
生成例:primer=[77, 29, 80, 53, 77, 58, 41, 65]
予測結果(×):
[84, 72, 77, 72, 77, 60, 53, 65, 82, 34, 53, 58, 82, 53, 48, 72, 77, 65, 84, 65, 84, 55, 60, 72, 77, 29, 58, 53, 77, 58, 41, 65]
正解:
[84, 72, 77, 72, 80, 60, 55, 67, 84, 36, 75, 58, 82, 53, 46, 70, 77, 65, 84, 65, 75, 53, 60, 72, 79, 31, 82, 53, 75, 58, 41, 65]
再現実験:primer=[71, 82, 69, 73, 84, -1, 69, -1]
予測結果(×):
[82, -1, -1, -1, 71, 74, 79, -1, 76, 73, 74, -1, 84, -1, 76, 68, 69, 72, 78, 71, 66, 69, -1, 71, -1, 82, -1, -1, 83, 66, 67, 76]
正解:
[82, -1, 84, -1, 71, 69, 84, -1, 76, 78, 74, 78, 77, -1, 74, -1, 77, -1, -1, -1, 76, 74, 79, -1, 69, 73, 69, 71, 82, -1, 67, -1]
A-3.「虹機械 はじまりのうた」比較実験3:入力文字列長=8 隠れ層のサイズ=256 学習率=0.001
Epoch数=3000 → loss=0.1106:再現=〇。
生成例:primer=[65, 82, 34, 51, 58, 82, 51, 46]
予測結果(×):
[70, 86, 70, 82, 63, 82, 53, 60, 72, 77, 29, 58, 51, 75, 58, 39, 63, 79, 65, 77, 70, 77, 58, 53, 65, 84, 36, 53, 60, 84, 53, 48]
正解:
[70, 86, 70, 82, 63, 84, 53, 60, 72, 77, 29, 58, 51, 75, 58, 39, 63, 79, 65, 77, 70, 77, 58, 53, 65, 84, 36, 53, 58, 82, 51, 46]
再現実験:primer=[71, 82, 69, 73, 84, -1, 69, -1]
予測結果(〇):
[82, -1, 84, -1, 71, 69, 84, -1, 76, 78, 74, 78, 77, -1, 74, -1, 77, -1, -1, -1, 76, 74, 79, -1, 69, 73, 69, 71, 82, -1, 67, -1]
正解:
[82, -1, 84, -1, 71, 69, 84, -1, 76, 78, 74, 78, 77, -1, 74, -1, 77, -1, -1, -1, 76, 74, 79, -1, 69, 73, 69, 71, 82, -1, 67, -1]
B-0. 「虹機械 公案-001」主実験:入力文字列長=4 隠れ層のサイズ=128, 学習率=0.001
Epoch数=5000 → loss=0.6119
Epoch数=10000 → loss=0.3532:再現=〇。
生成例:primer=[69, 64, 52, 59]
予測結果(×):
[-1, 78, 61, 73, 78, 66, 71, 52, 64, 69, -1, 74, -1, 69, 45, 76, 64, 71, 66, 78, 71, 59, 76, 45, 57, 74, -1, 69, -1, 76, 52, 71]
正解:
[-1, 78, 61, 69, 73, 59, 69, 50, 62, 67, -1, 62, 74, 57, 45, 64, -1, 71, 66, 76, 78, 63, 76, 45, 57, 74, -1, 55, 67, 62, 50, 57, -1, 76, 59, 71]
[-1, 78, 61, 73, 78, 66, 71, 52, 64, 69, -1, 62, 74, 57, 45, 64, -1, 71, 66, 78, 73, 61, 78, 47, 59, 76, -1, 57, 69, 62, 50, 57, -1, 76, 59, 71]
[-1, 78, 61, 73, 78, 66, 71, 52, 64, 69, -1, -1, 74, 57, 45, 64, -1, 71, 66, 78, 73, 61, 78, 47, 59, 76, -1, 67, 69, 62, 50, 57, -1, 76, 59, 71]
再現実験:primer=[61, 53, 68, 61]
予測結果(〇):
[73, 66, 90, 71, 59, 76, 52, 59, 71, 76, 68, 63, 68, 58, 63, 68, 80, 61, 85, 78, 66, 71, 47, 64, 76, 71, 61, 68, 63, 51, 67, 63, 75, 68, 92, 73]
正解:
[73, 66, 90, 71, 59, 76, 52, 59, 71, 76, 68, 63, 68, 58, 63, 68, 80, 61, 85, 78, 66, 71, 47, 64, 76, 71, 61, 68, 63, 51, 67, 63, 75, 68, 92, 73]
B-1. 「虹機械 公案-001」比較実験1:入力文字列長=2,隠れ層のサイズ=128, 学習率=0.001
Epoch数=5000 → loss=2.2712
Epoch数=10000 → loss=2.0701:中断。
B-2. 「虹機械 公案-001」比較実験2:入力文字列長=8,隠れ層のサイズ=128, 学習率=0.001
Epoch数=3000 → loss=0.5833
Epoch数=5000 → loss=0.2748:再現=〇。
生成例:primer=[96, 75, 70, 63, 78, 90, 93, 85]
予測結果(×):
[-1, 92, 58, 104, 80, 100, 95, -1, 93, 84, 67, 72, 75, 87, 102, 90, 85, 83, 49, 97, 78, 97, 102, -1, 100, 79, 74, 67, 82, 94, 97, 85]
正解:
[-1, 92, 58, 104, 69, 100, 93, -1, 91, 82, 65, 70, 73, 85, 100, 90, -1, 85, 51, 99, 73, 95, 100, -1, 98, 77, 72, 65, 80, 92, 95, 83]
再現実験:primer=[61, 53, 68, 61, 73, 66, 90, 71]
予測結果(〇):
[59, 76, 52, 59, 71, 76, 68, 63, 68, 58, 63, 68, 80, 61, 85, 78, 66, 71, 47, 64, 76, 71, 61, 68, 63, 51, 67, 63, 75, 68, 92, 73]
正解:
[59, 76, 52, 59, 71, 76, 68, 63, 68, 58, 63, 68, 80, 61, 85, 78, 66, 71, 47, 64, 76, 71, 61, 68, 63, 51, 67, 63, 75, 68, 92, 73]
6.考察
評価方法のところで述べたように、再現の成功・失敗は、作品冒頭を入力として次の音を予測させる再現実験の方で判定しますので、まずそちらの結果を確認します。
「虹機械 はじまりのうた」「虹機械 公案-001」とも、入力文字列長=4 隠れ層のサイズ=128, 学習率=0.001の設定で元の作品の音の系列の再現に成功しました。但し、作品の規模の違いにより、「虹機械 はじまりのうた」では5000エポックでloss=0.2829に到達したのに対し、「虹機械 公案-001」ではloss=0.3532に達するのに10000エポックかかりました。
入力系列長を4から2に短くする比較実験1の設定では、「虹機械 はじまりのうた」「虹機械 公案-001」とも10000エポックの訓練を行ってもlossが1桁高い値のままで、目安とした0.3まで到達する見通しが立たないため、実験を中断しました。
入力系列長を4から8に長くした比較実験2の設定では、「虹機械 はじまりのうた」「虹機械 公案-001」ともlossの減少のスピードが上がり、「虹機械 はじまりのうた」では3000エポックでlossが0.3を切り、5000エポックでは0.1319まで減少した一方で、再現には失敗しましたが、「虹機械 公案-001」では5000エポックで0.2748まで減少し、再現にも成功しました。
そこで「虹機械 はじまりのうた」については比較実験3を追加し、隠れ層のサイズを128から256に増やして、入力系列長8での実験を行ったところ、1エポックあたりの処理時間は増大したものの、3000エポックでloss=0.1106まで減少し、更に再現にも成功していることを確認できました。
一方、入力系列として作品の任意の一部を与えた場合については興味深い結果が得られました。再現に成功しているかどうかについて言えば、成功しているのは「虹機械 はじまりのうた」で入力系列長=4の場合のみでしたが、実はここでランダムに選択された入力系列は、「虹機械 はじまりのうた」の中で4回出現するパターンでした。そのうち3回については続く32ステップで同一ですが、残りの一つは異なります。そして予測結果は3回出現した方の続きと同一でした。類似の状況は「虹機械 公案-001」で入力系列長=4の場合でも生じており、この場合には「虹機械 公案-001」で3回出現し、後続の32ステップはそれぞれ少しずつ違って、同一のものはありませんでした。そして予測結果はその3か所のいずれとも異なるパターンでした。従って予測には失敗したことになるのかも知れませんが、そもそもこのようなケースでどれかと一致した結果が得られることが正解であると定義するのは果たして妥当でしょうか?
実験のデザインのところでも述べたように、「虹機械 はじまりのうた」「虹機械 公案-001」とも元の作品が局所的な状態遷移規則のみから決定的に軌道が決定されているわけではないことを考えると、他のケースのようにたとえ一度しか出現しないパターンの場合であっても、別のパターンが存在しえないかどうかについて断定はできないでしょう。「規則を学習する」という点に拘るのであれば、ランダムに選択された部分系列においてどのような規則が適用されているかを個別に見ていくべきなのかも知れませんが、それは今回の実験の目的を超えており、今回はどちらの作品についても作品中で一度しか出現せず、かつ局所的な規則のみから計算されている冒頭部分を与えた時の結果をもって判断することにした次第です。
そもそも虹機械系列の作品は、三輪さんの作品の中でも逆シミュレーション音楽やQUAD系列の作品(例えば「59049年カウンター」など)、五芒星系列の作品と異なって、演奏者も規則を意識して、規則を身体化するというより、生成された音の系列を実現するというやり方になるものと思われます。「規則に従う」といっても、生成された音の列の背後にある状態遷移規則に従っているのではなく、楽譜に記載された実現されるべき音の列の忠実な再生をしているということです。それに対して、今回の機械学習による模倣をどのように位置づけることができるのでしょうか?訓練されたニューラルネットワークは、与えられた音の列に対して、次に続く確率が最も高い音を返しますから、これは確率付きの状態遷移規則の実現には違いありません。それは演奏者が楽譜を「身体で」覚えるのとどう違うのでしょうか? 一方、ニューラルネットワークの訓練の過程では、外部から(実験を実行している人間によって)天下り式に「正解」が与えられ、誤差を少なくするようにノード間の重みの調整が行われますが、訓練が済んだネットワークが予測した音が誤っていた場合にも、ネットワークそのものはそれが誤りであることを知りませんし、誤りに気づくということがそもそもありません。ニューラルネットワークは或る仕方で規則を体現しているとは言えますが、「規則を知っている」とは言えず、また、それゆえ「規則を破る」(禁忌を犯す)ことも原理的にできないということは言えるでしょう。ここから言えそうなことはニューラルネットワークのみを切り出して論じることの抽象性で、システムとしての作動を考えた時には実験を行う人間も含めて論じなくてはならないということでしょうか。しかしそれならば、GAN(敵対的生成ネットワーク)のような仕組みはどのように位置づけられるのでしょうか?問いは果てしなく続きそうですが、これらの点について検討することは最早実験結果の報告の場に過ぎない本稿の範囲を超えており、別途論じる必要があるでしょう。それでも今回の実験結果は、そうした検討を行うための素材を提供してくれているということは言えるのではないかと思います。
(2024.10.10 オリジナル版公開, 2025.3.4 編集の上、noteにて公開)