お詫びとお断り

2020年春以降、2024年3月現在、新型コロナウィルス感染症等の各種感染症の流行下での遠隔介護のため、マーラー祝祭オーケストラ第22回定期演奏会への訪問を例外として、公演への訪問を控えさせて頂いています。長期間に亘りご迷惑をおかけしていることにお詫びするとともに、何卒ご了承の程、宜しくお願い申し上げます。

2022年7月7日木曜日

Google Magenta の Polyphony RNN モデルを用いたマーラーの作品の学習実験ノート・本文(2022.7.7 公開, 10.10更新)

元記事(2022年7月7日公開)の「はじめに」を2020年10月10日に独立させて「Google Magenta の Polyphony RNN モデルを用いたマーラーの作品の学習実験ノート・序文」とし、別記事として公開しましたので、併せてご一読頂ければ幸いです。


1.実験に至るまでの経緯と実験結果公開の目的について

 MagentaはGoogleが開発した音楽の機械学習ライブラリだが、その詳細についてはWeb等で情報が入手できる他、2021年7月に斎藤喜寛『Magentaで開発 AI作曲』(オーム社)が刊行され、環境構築や簡単な実験を行うための情報が入手可能になったことをきっかけに2021年の8月末くらいから予備調査に着手した。

 深層学習が注目されるようになって間もなくの頃は、深層学習の実験を自分で試行する手段としては、個人で購入するには決して閾が低いとは言い難いGPUマシンを自前で用意する他なかったが、Google ColaboratoryというクラウドサービスでGPU環境が利用できるようになった。早速試用してみると、無料での利用の範囲ではGPUが連続利用できる時間や利用できるメモリ等に制限がある他、高速なGPUが割り当てられるとは限らないといった制限があり、ちょっとした実験をするにも工夫が必要だが、月あたり1000円程度(為替相場による変動あり)のコストで最低限の実験環境を持つことができ、特に今回の実験に限れば実施可能であることが確認できた。そこでGoogle ColaboratoryのPro版で実験を行うこととした。

 一方、今回の実験の素材として第3交響曲第6楽章を取り上げた最大の理由は、本ブログで2ヵ月前くらい(2022年5月)に公開した記事(デイヴィッド・コープのEMI(Experiments in Musical Intelligence)によるマーラー作品の模倣についての覚え書)に記載の通り、デイヴィッド・コープの著書Computer Models of Musical Creativity(音楽的創造性のコンピュータモデル)の邦訳(『人工知能が音楽を創る 創造性のコンピュータモデル』(音楽之友社, 2017)に遅ればせながらようやく接し、そこでコープがEMIを用いて作成したマーラーの作品の模倣の一つに、この曲をモデルにしていると考えられるもの(『弦楽のためのアダージョ』)があることを、その一部(Mahler Adagio Emmy David Cope (1:57):Mahler Adagio for Strings fragment by Experiments in Musical Intelligence (Emmy) programmed by David Cope.)をYotubeで確認したからである。

 理由のもう一つは、Google Magentaが用意している幾つかのモデルの中で今回実験にPolyphony RNNモデルを用いたことにある。Polyphony RNNモデルはMagentaで用意されているモデルの中で和音を扱うことができるほぼ唯一のモデルといって良い、厳密にはPianoroll RNN-NADEモデルも候補になりうるのだが、こちらは持続方向の扱いに制約があるために、結果を「聴いて」直観的に評価することが困難であること以上に、Pianoroll RNN-NADE custom dataset sample generation error #1878 で報告されている事象に予備実験中に遭遇してしまったことから、消去法的にPolyphony RNNを用いることにしたというのが実態である。 

 既述の予備実験においては、第3交響曲第6楽章以外のマーラーの色々な作品のMIDIファイルを色々なやり方で与えた他、シェーンベルクがプラハ講演で述べたマーラーの作品の旋律の特徴を念頭に、歌曲の歌唱パートのみを抽出し、旋律のみを扱うmelody RNNモデルに与える実験も行った。しかしながら後述の理由から、機械学習の実験テーマとしては成立しそうに思われたものの、実験の目的やそれに応じた実験条件の設定についての検討の必要を感じたことから、今後の実験課題の候補には含めるものの、優先的に実験を行う対象とはしなかった。例えば第10交響曲の補完を考えた場合に、必要なのは与えられた旋律線に対する和声付けや対位法的な声部の補完といった方向性の課題となる。またくだんのシェーンベルクの指摘も、和声法や対位法的な垂直の次元を捨象した水平的な線の問題として扱うことが妥当かどうかには疑問の余地があるだろう。何よりもこれまでMIDIファイルを入力としたマーラーの作品の分析において中心的な課題としていたのは、調的重心であったり和声の出現頻度であったこととの連続性を踏まえれば、最初の実験としては単旋律の発展ではなく、和音のシーケンスを対象とするのが自然に感じられたということである。

 そして和声のシーケンスにフォーカスする場合にMagentaで事前に用意されたモデル中で適切なのは、上記の通りPolyphony RNNということになるが、Polyphony RNNモデルにおける課題の範例はコラール旋律への和音づけであり、直接にはFeynman Liang, BachBot: Automatic composition in the style of Bach chorales Developing, analyzing, and evaluating a deep LSTM model for musical style (2016)に記載されたBachBotという自動音楽生成アルゴリズムに刺激を受けて作成されたもののようである(なお、上記論文では先行研究としてデイヴィッド・コープの研究を参照している)。後述のように、Pythonのコードの形態で提供されているPolyphony RNNモデルの公開されている実装はコラール固有の特徴を前提として各種パラメータの規定値が設定されているため、マーラーの作品を対象とするにあたっては後述するようにパラメータの調整が必要ではあったが、線的な書法の作曲家であるマーラーの作品の中でも、第3交響曲第6楽章(更にその中でも主要部の主題旋律とその和声づけ)は「コラール風」のものと言って良く、Polyphony RNNを用いた実験の素材として無理がなさそうに感じられたというのも、実験で最初に取り上げる題材として選択した理由の一つである。

 だがその一方で第3交響曲第6楽章をGoogle Magenta の Polyphony RNN モデルに訓練データとして与えるということの意味合いについては議論の余地があるだろう。そもそもコープのEMIによるマーラー風のアダージョがどのようなプロセスで生成されたのかは明らかではない(正確を期すれば、現時点の私にとっては、という制限を付けるべきだろう。もしかしたら、この個別のケースについての報告がなされているかも知れないが、上掲のコープの著作の文献リスト中にそれらしいものはないし、コープは自分のプログラムを公開していたことがあるようだが、寧ろ重要なのは何を入力として与え、どのような制御パラメータがあって、それぞれどう設定したら結果がどのように変わるのかといったディティールの筈である。ここでも問題設定は、例えば囲碁や将棋のような、well-definedでclosedな世界とは異なって、寧ろチューリング・テストのような設定に近そうであることは、例えばバッハ風のコラールの和声づけをやった結果を人間に聴かせて、コンピュータが生成したものか否かを判定させて、人間の創作物と区別がつかなければ成功といった評価の仕方に端的に表れている。だがこの場合ですら、バッハの手になる作品か否かというように問いをずらした途端、バッハが行ったコラールの和声づけを「全て」知っている人間にとっては、未知の真作が発見されたといったような文脈抜きではトリヴィアルな問いになってしまうだろう。結果として、既知の作品の「模倣」という目的での或るモデル上での学習の結果の評価は、それを「人間」の曖昧な感覚に委ねるというやり方を拒否してしまえば、自ら定義した「模倣」の成功の度合いを密輸して(何なら堂々と再利用して)生成されたものとオリジナルの既知の作品の距離を測っているに過ぎないことになってしまうことを避け難い。

 それが「学習」であるならば、訓練用データを用いた訓練の結果として汎化が行われ、訓練データ以外のデータを与えた場合にも「それらしい」出力が行われることが求められるのだが、それでは第3交響曲第6楽章と似て非なる作品が生成されるためには一体何を訓練データとして用意すればいいのだろうか?(なおこの問いは、まさにマーラーその人を作曲する機械と見た立てた時、第3交響曲の第6楽章を出力する際に、どのような情報を素材にして、どのようなプロセスで生成が行われたかを問うていることに他ならない。そしてそうした類比を行う先には、Recurrent Neural Networkというチューリングマシンとしての能力を備えた再帰的構造を持つネットワークを基本とし、それが持つ問題点を解消するための制御ノードとして機能するゲートを追加して部分構造を持つようにしたLSTM(Long Short Term Memory)上に実装されたPolyphony RNN モデルがやっていることを、人間の営みとしての「作曲」と呼んでしまうことが孕む深淵が控えていることが見てとれる。)いわゆる「過学習」が起きている場合には、汎化能力が犠牲になる替わりに訓練用データについては精度の高い近似ができるようになっているとされるが、もしそうであるとするならば、ここでの関心は「学習」をさせることではなく、寧ろGoogle Magenta の Polyphony RNN モデルに第3交響曲第6楽章を訓練データとして与えた結果、訓練済モデルが第3交響曲第6楽章そのものを(音楽サヴァンの一部で見られるように完全に間違いなく、最初から最後まで、ではなく、時として間違いを含みつつ、だが或る一部についてはかなりの高精度で)再生できるかどうかにあるのではなかろうか?

 一般的に機械学習の問題設定として見た場合には、演奏すれば20分以上の時間を要するから作品としては大規模なものであるとはいえ、400小節にも満たない第3交響曲第6楽章だけをLSTMの学習の素材として与えることは、サンプル数が少なすぎて適切なものではないという評価になるだろう。一方で第3交響曲第6楽章を出力として得るためには、どういう学習の問題を設定したらよいかというのは、上で見たように端的に言って不良設定問題に過ぎない。従ってここで以下に報告する実験は、形式的にはそのように見えるということもあって、Google Magenta の Polyphony RNN モデルを用いたマーラーの作品の学習実験と銘打っているけれども、実態としては、それが「学習」なのかどうかは一先ずおいて、とにかくGoogle Magenta の Polyphony RNN モデルにマーラーの作品のうちの特定の1楽章を与えてみた結果の報告に過ぎないということをお断りしておきたい。

 なお実験に使用したMagentaのバージョンは2.1.3である。このバージョンは2022年7月1日以降、関連するライブラリの更新の結果、Colaboratory環境にインストールすることができなくなり、本稿執筆時点では実験再開の見通しは立っていない。基本的にはフリーで提供される場合には、こうした状況はしばしば発生し、基本的に利用する側が自己解決すべき性質のものとされ、時間をかけて依存関係を調べて、トライアル&エラーを繰り返せば利用できる可能性もあるだろうが、遺憾ながらそのための時間的な余裕がないため、一旦Magenta を使った実験は中止せざるを得ない。まだ実験を開始してからの時間が短く、敬虔が浅いため、まだまだ改善や工夫の余地があるにも関わらず、一旦これまでの経過を報告することにしたのには、Magenta 2.1.3 が私の環境で使えなくったという事情も寄与している。

[2022.10.10 追記]その後程なくして、遅くとも2020年8月下旬くらいには、ライブラリの依存関係の問題が解消され、再びMagentaを私のColaboratory環境から利用できるようになり、9月中旬には、それまでに実施できていた実験が行えることを確認した。この追記を行うにあたり、念のため最新の状態を確認したが、利用可能な状態にあることを確認できた。そのため、今後更に、このノートの内容を踏まえた追加実験を行うことがあれば、稿を改めて報告することにしたい。

 最後にもう一言だけ述べてこの節を閉じることにするが、「学習」実験の設定としてはより自然なものに見えるであろう、例えばマーラーの複数の作品を入力として与えたらどうなるかという設定について検討しなかったわけではない。既に述べた通り、予備検証フェーズでは、マーラーの歌曲でMIDI化されているものすべてを対象とした検証は実施しているし、マーラーの交響曲全曲のMIDIファイルを対象とする検証も実施はしており、だがこちらはリソースの限界が確認できたために中止することにした。無論対象を絞って、リソースの制約上可能な条件を設定することは可能なのだが、それ以前の問題としてマーラーの複数の作品によってモデルを訓練させることの意味合い、結果として生成される音の系列をどう評価するかについて、上述のような疑問を感じて、実験することに意義を見出せなかったということの方が本質的であると考える。例えば思考実験として、マーラーの歌曲の中から2曲を取り上げて学習させることにしよう。この場合なら、何が学習されるのか?一方で、ごくありふれたこととして、或る歌曲なり交響曲楽章の内部構造として主要部と対比的な部分があるとして、主要部の複数のヴァリアントを与えるなり、主要部と対比部のコントラストを与えるなりすることとどう違うのか。もちろんそれは学習機械の構造にもよるし、具体的な学習時のパラメータと入力として用意したデータとの関係で決まる部分もあるだろうが、ここで私に言えることは、こうした問いは自明でトリヴィアルなものという訳ではないということであり、実のところ今回の実験は、もしかしたらトリヴィアルかも知れないこうした問いについて、それゆえ他の誰もやってみようと思わない実験をやってみた結果を報告することを目的としているというのが実態に即しているように思われる。

 

2.予備検証により判明した本番実験に向けての課題と本番実験方針の決定

2.1.MIDIファイルの事前編集

 Google Magentaは入力としてMIDIファイルを使うことができるので、これまでMIDIファイルを入力としたデータ分析に利用することを目的に、Web上で取得可能でかつフリーで使用可能なMIDIファイルを取得・蓄積してきたものが活用可能である。実際2021年8月末から約1ヵ月程度、断続的に実施した予備実験では、調的重心の移動の可視化や和音の出現頻度に関する統計的な分析の入力として使用してきたMIDIファイルを利用した検証を行うことができた。その一方でMagentaで用意されたモデルが入力として要求するMIDIファイルには制限があり、手元にあるMIDIファイルをそのまま使うことができないことが調査の結果判明した。

 手元にあるMIDIデータは、DTMの一環としてMIDIシーケンサソフトウェアを用いて手入力されたものであるか、MIDIキーボードでの演奏をMIDIデータとして保存したもののいずれかであることが多いが、マーラーの作品の場合にはピアノ伴奏版がある一部の歌曲を除けば管弦楽曲であるためマルチトラック・マルチチャネルで作成されているため、Polyphony RNNモデルへの入力となるMIDIデータはシングルトラック・シングルチャネルである必要がある。マーラーの作品は既存のMIDIファイルはマルチトラック・マルチチャネルで作成されており、Magentaで利用するためには事前にMIDIシーケンサソフトを使ってデータを加工・変換する前処理が必要であることがわかった。 トラックの統合はMIDIシーケンサソフトで比較的簡単に行うことができるが、統合されたトラックの開始部分にはもともと各トラック毎にチャネルを指定していたプログラムチェンジが残っていて、マルチチャネルの状態は解消されていない。そのためMagentaで利用するには更にプログラムチェンジを取り除く必要があることがわかった。


2.2.Onsets and Frames Transcriptionの出力の利用の検討

 ところでマーラー作品のMIDIデータの作成の方法としてもう一つ、ピアノ編曲の演奏をMIDIファイルに変換するというやり方がある。MIDIキーボードを用いた演奏であれば演奏をMIDIデータとして保存することでMIDIデータが生成されるが、アコースティックのピアノの演奏の音響を録音して保存した場合には、wavなどの様々なフォーマットで作成された音響ファイルをMIDIデータに変換しなくてはならない。

 この変換の実現手段として、それ自体Magentaを使ったアプリケーションであるPianoScribeがあり、かつColaboratory上では、Onsets and Frames TranscriptionというNotebookとして提供されているので、これを用いてwavファイルをMIDIファイルに変換することが可能である。Youtube等でマーラーの交響曲のピアノ編曲版の演奏が公開されており、第3交響曲第6楽章については以下のように2手用・4手用の演奏があるため、これらを入力としてまずOnsets and Frames Transcriptionの検証を実施した。

 結果としてOnsets and Frames Transcriptionの性能は申し分なく、音響データが精度よくMIDIコードに変換されることがわかったが、その一方で結果を確認してみると、当然のことではあるが、あくまでもこれは音響データのMIDIコード化であって楽曲の構造を意識したものではないから、例えば小節・拍に関しての処理はなされず、本来ならば記譜上、拍節構造を持つものとしてMIDIコード化された上で、実演において微妙なアゴーギクが施されたものがMIDIのテンポ変更コマンドとしてコード化されるべきものが、直接長さの微妙な差異がMIDIノートのステップ数として表現されてしまっていることがわかる。また現実の演奏にありがちな和音の打鍵のぶれや、長さのムラ、或いはミスタッチについても当然のことながらそのまま記録され、修正や規格化が行われることはない。

 Polyphony RNNモデルは拍節構造を意識したものではないから、以前に取り組んだ拍頭の和音の集計や分類におけるような致命的な問題にはならないし、更に言えば微妙な演奏上のクセのようなもの込みで学習するという別種の可能性もあるにせよ、ここでの関心からすると遠回りな感覚を否めず、その手間を埋め合わせるだけのコストメリットは見出し難い。更にいえば、分析目的ではなく、あくまでも演奏されることを目的に作成された編曲版は、ピアノという楽器の性質を踏まえて然るべき演奏効果を上げることを目的として、しばしば元の管弦楽版の楽譜に忠実であるとは限らない。

 具体的に第3交響曲第6楽章について言えば、上記の2手用編曲と4手用編曲の演奏記録が存在するわけでが、前者がピアノ独奏で大規模な管弦楽を用いたマーラーの交響曲を演奏することに由来する改変が目立つのに比べれば、ここでの目的に照らして後者に分があるのは明らかだとはいえ、後者もまた独自の演奏効果を求めて管弦楽版には存在しない要素が追加されていることには違いなく、管弦楽総譜に忠実にマルチトラック・マルチチャネルで作成されたMIDIファイルをシングルトラック・シングルチャネルにマージしたMIDIファイルの方が今回の目的には適っていると判断し、Onsets and Frames Transcriptionの出力は実験には採用しないことを決定した。


2.3.入力データの調整、訓練用データ生成のパラメータの調整について

 そこで管弦楽総譜に忠実にマルチトラック・マルチチャネルで作成されたMIDIファイルについて確認してみると、第3交響曲第6楽章については以下の2種類のMIDIファイルがWebで公開されており、利用可能であることがわかる。(本ブログのMIDIファイル(2019.9.21更新) を参照されたい。)

  • GustavMahler.Comで公開されているBen Boot作成の6th-movement-Langsam-Ruhevoll-Empfunden.midi (16-channel)
  • 加藤隆太郎さんの旧「Deracinated Flower」のコンテンツの一つであった「MIDIの間」中の「マーラー交響曲 MIDI 全集」に含まれる m3_6.mid。記載はないがこちらも16channelである。(2022.10.10 プロバイダの閉鎖によりアクセスできない旨記載していたが、2022年7月20日にご本人より移転のご連絡を頂いた。現時点では、http://kakuritsu.sitemix.jp/asobi/midi2/index.html に移転されており、再びアクセス可能な状態となっている。)

 このうち後者のMIDIファイルの作者とはマーラーの作品のMIDIファイルの調査を実施した折にメールでやりとりをさせて頂いており、作成方針から第10交響曲こそないものの、その時より今日に至るまで、文字通り世界で唯一の「マーラー交響曲 MIDI 全集」である後者のデータを従来より和音の出現頻度や調的重心の遷移などのデータ分析で用いてきたこともあり、ここでも後者のMIDIファイルを素材とすることにした。(ちなみに前者は第1交響曲こそ2種類のデータが入手可能であり、更には第10交響曲のデリック・クックによる演奏会用補筆完成版のMIDIファイルが公開されていることが特筆されるものの、第6~8交響曲と「大地の歌」を欠いており全集とはなっていない。)

 既に述べたように、Google Magentaは入力としてMIDIファイルを受け付けるが、事前に用意されているモデル毎に制約事項が存在する。ここで利用を予定しているPolyphony RNNモデルについては、シングルトラック・シングルチャネルであることを条件としているとのことなので公開されているMIDIファイルをそのまま使うことができない。そこでMIDIシーケンサソフトを使って、Magentaに与えることができるかたちに加工する作業を実施することにした。

 使用したMIDIシーケンサソフトは、従来の和声の出現頻度や調的重心の遷移過程の分析にあたって利用してきた以下の2つのフリー・ソフトである。

 対象としたMIDIファイル m3_6.mid は16チャネル16トラックだが、ピッチを持たない打楽器用の第10チャネル/第10トラック以外について1トラックにマージする作業をまず実施した。その結果を用いて試しにMagenta(バージョン2.1.3)のPolyphony RNNモデルに与えて、NoteSequenceファイル(notesequences.tfrecord)の作成、NoteSequenceファイルから抽出した訓練データ(training_poly_tracks.tfrecord)の作成、訓練の実行、更には訓練結果のbundle_file (polyphony_rnn.mag)への出力、bundle_fileを使った楽曲生成と一通りの手順を試行してみた結果、一応最後まで実行できることが確認できたのだが、訓練データ(training_poly_tracks.tfrecord)作成にあたって、訓練データとして抽出する条件に多くの部分が合致せず、結果として訓練用データがわずかしか生成されないことを確認した。原因を探るべく、Pyrhonで実装されたPolyphony RNNモデルのソースコードの中の訓練データ・評価データの作成を行うpolyphony_rnn_create_dataset.py を読んでみると、Polyphony RNNモデルの公開されている実装については、前提としてバッハのコラールが学習の対象であることから、コラール固有の条件が各種パラメータの規定値とされていることが判明した。例えばシーケンスの長さの上下限の制限が厳し過ぎて、訓練用データが生成できないケースが多い。これに対処するために、ローカルにmagentaの環境のクローンを作成し、シーケンスの長さの下限の制限を緩和したコードでデータ生成を行うことにした。

 具体的な修正箇所はpolyphony_rnn_create_dataset.py の中でmin_steps, max_stepsの設定をしている箇所()で、それぞれの標準値は以下の通り。
  • min_steps=80(5小節相当
  • max_steps=512 (32小節相当) 
 標準値は明らかにコラールのフレーズの構造および各フレーズの長さ、コラール全体の長さを想定したものであることがわかる。そこで第3交響曲第6楽章という対象の性質を考慮して、以下のように値を設定することとした。 

(A)予備実験でのパラメータ設定
  • min_steps = 16(=16*1) 1 measures:より短いフレーズの抽出を行う。
  • max_steps = 768(=16*48) 48 measures :1.5倍の長さのフレーズまで抽出。
 上記の設定値での予備実験の結果は、lossやaccuracyといったメトリクスは良好であるにも関わらず、生成結果は期待外れだったことから、短すぎるトラックが副作用を起こしている可能性を考慮して、本番では以下の通り、minを若干長く設定することにした。
 
(B)実験本番でのパラメータ設定
  • min = 48(=16*3) 3 measures:より短いフレーズの抽出を行う。
  • max = 512(=16*32) 32 measures :デフォルト値のまま。
 上限について変更しないことにしたのは、後述のMIDIファイルの分割を実施したこともあり、実際に訓練データ・評価データの抽出を行ったときに、上限超過が原因で抽出対象から除外されたケースが生じなかったことから、変更の必要がなかったことによる。上下限とも値をデフォルトに戻したのは、訓練に用いるネットワークのサイズを変更せず、デフォルト値を使うことと関わる。このデフォルト値の範囲ならばデフォルトの規模のネットワークでの学習が可能でサイズ変更は不要だろうという判断に基づく。
 
 更に上記のパラメータ変更を前提とし、第3交響曲第6楽章という対象の性質を考慮して、シングルトラック化・シングルチャネル化したMIDIファイルをまず幾つかのブロックに分割することを検討した。分割のやり方としては機械的に行うことも考えられるが、訓練用データ・評価用データの作成の抽出の仕方を考えると、質の面でも量の面でも楽曲の構造を意識した分割をした方が望ましいことは明らかであるから、楽式上の区切りを考慮して、まずは全体を10ファイルに分割したデータを用意することにした(program_merged_36)。
  • ①最初から練習番号4 Noch mehr so breit.の手前まで
  • ②練習番号4 Noch mehr so breit.から練習番号9 Tempo I. Ruhevoll! の手前まで
  • ③練習番号9 Tempo I. Ruhevoll!から練習番号14 a tempo (Etwas bewegter.)の手前まで
  • ④練習番号14 a tempo (Etwas bewegter.)から練習番号16 a tempoの手前まで
  • ⑤練習番号16 a tempo から練習番号19 a tempo の手前まで
  • ⑥練習番号19 a tempo から練習番号20. 2/2 taktiren. Sehr bewegt.の手前まで
  • ⑦練習番号20.2/2 taktiren. Sehr bewegt.から練習番号23の5小節手前まで
  • ⑧練習番号23の4小節手前から練習番号25 Wieder Viertel schlagen! Langsamの手前まで
  • ⑨練習番号25 Wieder Viertel schlagen! Langsam から練習番号26の2小節前8/8 Sehr zurueckhaltend. の手前まで
  • ⑩練習番号26の2小節前8/8 Sehr zurueckhaltend.から最後まで
 次いで更に上記の分割結果をベースとして、更に以下のような加工を行った。
 
(1)コーダはフレーズの構造としては特殊であり、カデンツが拡大したものとみることができるため、ここでの目的の観点から削除した。コーダの前にある、アドルノ風には「充足」の機能を持つ後楽節についてはコーダとは機能的には異なるが、それを独立のフレーズとして訓練用データに含めると異質な感じがあるので、同様に削除することにした。
(2)トレモロの指定もなくして、同じ長さの単音符に置換。学習する上で、トレモロの有無が特徴として捉えられるのは、今回の実験の目的にはそぐなわないため、外してしまうことで余計な特徴次元のためにリソースが使われてしまうことを防ぎたい。(実際、全小節を10分割した入力データでの訓練結果を使って生成したケースでは、トレモロが特徴として捉えられていることを窺わせるものであった。)
 (3)対比群を削除して主要主題部に限定したデータを用意。既に述べた通り、楽式分析上は二重変奏と把握されることが多い第3交響曲第6楽章を対象としているので、2つの異なった系列の交替を、だが訓練用データとしてはブロック単位で分割して、それぞれ独立したサンプルとして、だが2系列を同時に一度に与えて(つまりバッチの中でも両方が混在するような前提で)訓練するというのはどういうことをしていることになるのだろうか、という疑問が生じる。勿論このことは、機械学習による作曲一般に言えることではないのだが、人間が介在することなしにコラールのような単純な形式を超えた楽式を機械が学習を通じて習得することに成功したという話は聞かないし、Google Magenta の各モデルで想定されているのは(出力のステップ数のデフォルトはpolyphony_rnn_generate.pyの62行目に定義されており128step=8小節であることからも窺えるように)、作品上では一部に過ぎないフレーズレベルの時系列シーケンスの学習であって、マクロな楽式はGoogle Magentaのモデルに限定すれば実質的にスコープの外であろう。(それに対して、コープが想定しているのが、その範囲に留まらないことは恐らく間違いないが、その代わりに、例えばマーラー風アダージョを生成するのに、具体的に何を入力し、どのようなプロセスを経たのかの具体的な説明はなく、最終的にYoutubeでその断片が公開されている「作品」の成り立ちのどこがEMIが自動的に生成した部分で、どこがコープが介入したのかは明らかではない。)従って、ここでの学習の枠組みを考えたとき、楽曲を加工をせずにまるまる一つ学習モデルに与えるのではなく、訓練データ・評価データが具体的にどのような条件で抽出されるのかを踏まえて、逆算するようなかたちでモデル与えるデータを準備してやり、生成された結果については、時系列のパターンの記憶・再現がどの程度できているかを確認するのが妥当に思われるのである。
 
 これまでの検討により、最終的に実験の対象として用意したデータは、第3交響曲第6楽章全曲を分割した10ファイルのうち以下の部分を抽出したものとした。
  • ①,40 measures.:最初から 練習番号4 Nicht mehr so breitの前まで。
  • ③,40 measures.:練習番号9 tempo I. Ruhevollから練習番号13 Nicht mehr so breitの前まで
  • ⑦b,16 measures.:練習番号21 tempo I.から22の8小節後, Unmerklich draengend.の前まで。
  • ⑩a,26 measures.:練習番号26の2小節前8/8 Sehr zurueckhaltend.から練習番号28 Immer breiter.Langsam anschwellen の前まで
  • ⑩c,26 measures.:練習番号28 Immer breiter. Langsam anschwellen から練習番号30 の4小節後まで 

total 148 measuresであり、楽章全体(328 measures)の45%程度だが、抽出された部分はコラール的な旋律の提示と変容であり、Polyphony RNN モデルがバッハのコラールの和声づけであることを考えると、マーラーの作品を素材とする前提においては相対的に親和性の高い部分ではないかと考えられる。 

 上記の前処理およびパラメータの設定により訓練用データ・評価用データの抽出結果がどうなったかを以下に示す。

(A)予備実験:全曲を10の区分に分割(328小節、10ファイル)

データ抽出のパラメータ

  • min_steps = 16(=16*1) 1 measures:より短いフレーズの抽出を行う。
  • max_steps = 768(=16*48) 48 measures :1.5倍の長さのフレーズまで抽出。
  • 10 inputs. / 216 outputs..(= train (198 =9+117+54+9+9) + eval(18 = 9+9))

    eval:#評価用データ

    • 小節数毎の頻度(計18)
    • [10,20): 9
    • [20,30): 9
    • polyphonic_tracks_discarded_more_than_1_program: 0
    • polyphonic_tracks_discarded_too_long: 0
    • polyphonic_tracks_discarded_too_short: 153
    • poly_tracks_count:1,
    • skipped_due_to_range_exceeded: 0,
    • transpositions_generated: 171, 

    train:#訓練用データ

    • 小節数毎の頻度(計198)
    • [0,1): 9
    • [1,10): 117
    • [10,20): 54
    • [20,30): 9
    • [30,40): 9
    • polyphonic_tracks_discarded_more_than_1_program: 36 #本番実験では修正して0に。
    • polyphonic_tracks_discarded_too_long: 0 
    • polyphonic_tracks_discarded_too_short: 1161
    • poly_tracks_count: 9,
    • skipped_due_to_range_exceeded: 0,
    • transpositions_generated: 1395


    (B)実験:主要部の提示と変容の部分のみ5つの区分に分割(148小節分、5ファイル)

    • データ抽出のパラメータ

  • min = 48(=16*3) 3 measures:デフォルト値に戻す。
  • max = 512(=16*32) 32 measures :デフォルト値に戻す。
  • 5 inputs. / 81 outputs.(= train (63 = 27+18+18) + eval(18 = 0+9+9))

    eval:#評価用データ

    • 小節数毎の頻度(計18データの内訳)
    • [10,20): 9
    • [20,30): 9
    • polyphonic_tracks_discarded_more_than_1_program: 0
    • polyphonic_tracks_discarded_too_long: 0
    • polyphonic_tracks_discarded_too_short: 27
    • poly_tracks_count:1
    • skipped_due_to_range_exceeded: 0
    • transpositions_generated: 45

    train:#訓練用データ

    • 小節数毎の頻度(計63データの内訳)
    • [10,20): 27
    • [20,30): 18
    • [30,40): 18
    • polyphonic_tracks_discarded_more_than_1_program: 0
    • polyphonic_tracks_discarded_too_long: 0 
    • polyphonic_tracks_discarded_too_short: 270
    • poly_tracks_count: 4
    • skipped_due_to_range_exceeded: 0
    • transpositions_generated: 33
     polyphonic_tracks_discarded_more_than_1_programが0であることは、マルチチャネルのMIDIコマンド(Program change)が正しく全て削除されていることを意味する。既述の通り、大抵のMIDIファイルがマルチトラック・マルチチャネルで作成されており、特に管弦楽のMIDIファイルをシングルトラック化した場合、Program changeの情報を削除しないとマルチチャネルの方は残ってしまう。削除漏れがないことを確認するためにはこの項目をチェックすれば良い。
     polyphonic_tracks_discarded_too_longが0であることはmax_stepsを上回るデータがないことを、polyphonic_tracks_discarded_too_shortが0でないことはmin_stepsに満たないデータがあることを意味する。


    2.4.訓練時のハイパーパラメータの設定について

     ここまで学習の入力とするデータの調整や訓練用データ生成のパラメータの調整について述べてきたが、ここでは訓練時のハイパーパラメータの設定について、検討したり予備実験を実施した内容を述べる。今回の実験にあたって設定値の検討を行ったハイパーパラメータは以下の2種類である。

    • rnn_layer_size:Polyphony RNNモデルの場合、入力層・中間層・出力層の三層のノードの数を指定する。デフォルト値は[256, 256, 256]。今回は予備実験時および実験本番の1度目はデフォルト値のままとし、実験本番の2回目に[192, 192, 192]に縮小した時にどのような差がでるかの実験を行った。
    • batch_size:これは訓練・評価で同じサイズを指定することを前提にすれば、データ数が少ない評価用データ数がバッチサイズよりも小さくてはならないという点が拘束条件となる。デフォルト値は64。ここでは予備実験時も実験本番でもeval=18なので、全ての実験において batch_size=18とした。

     今回の実験のようにサンプルデータが少ない場合、まず最初に調整を検討すべきハイパーパラメータはバッチサイズだが、これは訓練用データ、評価用データの出力データ数に応じて変更すべきであるとされる。ネットワークのノード数については回帰式における変数の数とのアナロジーで考えることができ、問題の規模と比べて数が多いとオーバーフィッティングに陥りやすく、ノード数が少ないと粗い近似しかできないため、accuracyやlossといった近似の精度を示す値が頭打ちになりやすい。今回の場合、実験本番の1回目において5000 stepでaccuracy=0.985, loss=0.047となったことを踏まえて、2回目にはノード数を減らし、そのかわりに6000 stepまで訓練を行って比較検証を行った。


    3.訓練結果の概要

    予備実験、実験本番1回目、2回目それぞれの訓練の結果を、Tensorboardの基本的なスカラー量についてのグラフで示す。オレンジ色のグラフは訓練の経過を、青色のグラフは評価の結果を示している。それぞれの指標の意味については上掲書やWeb上の解説を参照頂きたく、ここでの説明は割愛する。

    (A)予備実験(~4500 step ~7000 step)












    (B-1)実験本番第1回目(~6000 step)












    (B-2)実験本番第2回目(~3000 step ~5000 step ~6000 step)












    4.本学習予備実験の経過を収めたアーカイブファイルについて

    本学習予備実験の経過を収めたアーカイブファイルをGoogleドライブで公開中で、以下のURLから取得可能である。

    内容は以下の通りである。

    ①polyphony-m3_6_1-48-4500

    • m3_6-1-48-4500.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(4500 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • polyphony_rnn.mag:訓練済モデルのdumpファイル
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(4500 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy-4500
      • batch-4500
      • event_accuracy-4500
      • global_step-4500
      • input_producer-4500
      • loss-4500
      • loss_per_step-4500
      • no_event_accuracy-4500
      • perplexity-4500
      • perplexity_per_step-4500
    ②polyphony-m3_6_1-48-7000
    • m3_6-1-48-4500.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(4500 stepまで)
    • m3_6-1-48-7000.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(7000 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(7000 step時点の訓練結果による)
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(7000 step時点の訓練結果による)
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(7000 step時点の訓練結果による)
    • generated-4500/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(4500 step時点の訓練結果による)
    • generated_1-4500/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(4500 step時点の訓練結果による)
    • generated_2-4500/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ(4500 step時点の訓練結果による)
    • polyphony_rnn.mag:訓練済モデルのdumpファイル(7000 stepまで)
    • polyphony_rnn-4500.mag:訓練済モデルのdumpファイル(4500 stepまで)
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(7000 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy-7000
      • batch-7000
      • event_accuracy-7000
      • global_step-7000
      • input_producer-7000
      • loss-7000
      • loss_per_step-7000
      • no_event_accuracy-7000
      • perplexity-7000
      • perplexity_per_step-7000
    ③polyphony-m3_6_extracted-3-32-256
    • program_merged_36_extracted2.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(5000 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • polyphony_rnn.mag:訓練済モデルのdumpファイル(5000 stepまで)
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(5000 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy
      • batch
      • event_accuracy
      • global_step
      • input_producer
      • loss
      • loss_per_step
      • no_event_accuracy
      • perplexity
      • perplexity_per_step
    ④polyphony-m3_6_extracted-3-32-192-3000
    • program_merged_36_extracted2-192-3000.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(3000 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • polyphony_rnn.mag:訓練済モデルのdumpファイル(3000 stepまで)
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(3000 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy-3000
      • batch-3000
      • event_accuracy-3000
      • global_step-3000
      • input_producer-3000
      • loss-3000
      • loss_per_step-3000
      • no_event_accuracy-3000
      • perplexity-3000
      • perplexity_per_step-3000
    ⑤polyphony-m3_6_extracted-3-32-192-5000
    • program_merged_36_extracted2-192-5000.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(5000 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • polyphony_rnn.mag:訓練済モデルのdumpファイル(5000 stepまで)
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(5000 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy-5000
      • batch-5000
      • event_accuracy-5000
      • global_step-5000
      • input_producer-5000
      • loss-5000
      • loss_per_step-5000
      • no_event_accuracy-5000
      • perplexity-5000
      • perplexity_per_step-5000
    ⑥polyphony-m3_6_extracted-3-32-192-6000
    • program_merged_36_extracted2-192-6000.txt:訓練用ファイル・評価用ファイル生成から訓練済モデルによる楽曲生成実験までの実行ログ(6000 stepまで)
    • test/ :学習用に前処理を行ったMIDIファイルのフォルダ
    • noteseq/:NoteSequenceファイル(notesequences.tfrecord)のフォルダ
    • sequence_examples/:訓練データ(training_poly_tracks.tfrecord)および評価用データ(eval_poly_tracks.tfrecord)のフォルダ
    • logdir/run1/train/:訓練の経過ログが格納されているフォルダ
    • primer/:楽曲生成のキューとなるprimerファイルのフォルダ
    • generated/:m3_6_0_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_1/:m3_6_1_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • generated_2/:m3_6_2_primer.MIDをprimerとした楽曲の生成結果(10ファイル)が格納されているフォルダ
    • polyphony_rnn.mag:訓練済モデルのdumpファイル(6000 stepまで)
    • *.jpg:訓練経過の評価のための各種スカラー値をTensorboardでグラフ化したもの(6000 stepまで)。それぞれの意味については上掲書やWebでの説明を参照されたい。
      • accuracy-6000
      • batch-6000
      • event_accuracy-6000
      • global_step-6000
      • input_producer-6000
      • loss-6000
      • loss_per_step-6000
      • no_event_accuracy-6000
      • perplexity-6000
      • perplexity_per_step-6000

    *    *    *

    [ご利用にあたっての注意] 公開するデータは自由に利用頂いて構いません。あくまでも実験的な試みを公開するものであり、作成者は結果の正しさは保証しません。このデータを用いることによって発生する如何なるトラブルに対しても、作成者は責任を負いません。作成者自身の無理解や実施時の不注意による間違いの可能性は勿論ですが、それ以外にも入力として利用させて頂いたMIDIファイルに起因する間違い、分析プログラムの不具合に起因する間違いなど、各種の間違いが含まれる可能性があることをご了承の上、ご利用ください。

    (2022.7.7 公開, 2022.10.10 実験対象の一つとして利用させて頂いているMIDIファイルの提供元である加藤隆太郎さんの「マーラー交響曲 MIDI 全集」のURLに関する情報を最新のものに更新。 Google MagentaのColaboratory環境での利用可否についての記載も更新。2023.3.10「はじめに」を序文として独立の別記事に)

    Google Magenta の Polyphony RNN モデルを用いたマーラーの作品の学習実験ノート・序文(2022.7.7 公開, 7.10, 11.12更新, 2023.3.9-10追記)

     はじめに

     マーラーの作品を素材とした人工知能による模倣の実験を行った結果を以下で報告する。より具体的に言えば、以下で報告するのは第3交響曲第6楽章を入力とし、Google Magentaで用意されているモデルの一つであるPolyphony RNNモデルを用いた実験の結果である。まず実験に至るまでの経緯に触れながら、なぜGoogle MagentaのPolyphony RNNモデルを使ったのか、なぜ第3交響曲第6楽章が選択されたのかについて説明することを通じて、この実験を実施するにあたって考えたことや、実験結果を公開することにした目的について記載したい。なお本稿では、音楽の機械学習全般やMagentaに関する説明は次節で紹介する書籍やWebで入手できる情報に譲ることとして説明を割愛し、その書籍に記載されている内容程度の予備知識があることを前提とし、実験の背景や狙い、実験を行った環境および結果について記載することとさせて頂く。なお、序文の長さがかなりのものになったことから、本文から分離して別記事として公開することにしたので、背景や狙いはおいて、実験環境や結果のみに関心のある方は、直接本文を参照されたい。)

     まず記事タイトルで「学習実験」と言っておきながら、冒頭「模倣の実験」という言い方をした点についてお断りしておく。というからにはそれはうっかりミスでもなければ、言葉遣いの極端なルーズさに起因するものでもなく、意図的な選択の結果である。Google Magentaは、深層学習と呼ばれる一連の技術的なブレイクスルーによって近年脚光を浴びている人工知能技術の一つである機械学習を用いた自動作曲のための環境として知られている。コンピュータによる自動作曲は人工知能の黎明期からの典型的なタスクの一つであるが、そのために用いられる技術は多様で、個別の技術要素のみを取り出してしまえば今日の「人工知能」のイメージからは遠い手法が用いられる場合も少なくないが、ここでは環境としてGoogle Magentaを用いていること、素材としてマーラーの作品を用いていること、ある目的のためのツールを他の目的に転用するといったレベルでの転用をしているわけではなく、Google Magentaでのごく一般的な自動作曲の手順に従って、訓練のための前準備から訓練した結果を用いた楽曲生成までを行っていることから、一先ずはここでやったことを「学習」の実験と呼ぶのが自然であるのがタイトルで「学習実験」と形容した理由である。他方で本文冒頭で「学習」とは言わず「模倣」と言ったのは、実施した実験の諸条件が、ここで特に実験結果を公開するその最後の段階の幾つかに限らず、予備的で試行錯誤的な段階を含めた総体としてみた場合でも、通常Google Magentaを用いて行う自動作曲の典型からの逸脱を含んでおり、その点を配慮した場合にはこれを「学習」と呼ぶことは不適切であり、寧ろ「模倣」と呼ぶべきであるということが理由である。最も多様な素材を入力とした場合でもその範囲がマーラーの作品に限定されているということ、なおかつここで用いられる学習のメカニズム、つまりLSTM(Long Short Term Memory)という人工ニューラルネットワークの振る舞いを踏まえ、更には実際に実験の生成結果を確認した限り、ここでやっていることは寧ろ「模倣」と呼ぶのが適切であると考えた結果なのである。

     とはいえそうした区別は文脈に出来るだけ依存しない厳密な定義を追求した結果というわけでもない。例えば古典派なりロマン派の作品をかき集めて入力して、ありえたかもしれない古典派作品ないしロマン派作品を自動生成する試みは機械学習のタスクとしてはごくありふれた典型的な設定だろう。そしてその場合に訓練時に与えるサンプル数は少なめに見ても数百・数千程度であることが実は暗黙の前提となっている。更に言えば、そうしたサンプルの集合が理想的には或る特定の統計分布に従っていることが学習が成功するための理論上の前提とされており、サンプルがある仕方で分布する抽象的な空間の中で、サンプル点そのものではなく、その近傍にある点を生成するというのが学習に基づく自動作曲の実質だが、それを可能にするためには一定量のサンプルが欠かせないし、そのサンプルの集合の統計的な性質がどんなものあっても良いというわけではなく、学習メカニズムが前提としている分布に近いものであればあるほど良好な結果が得られる可能性が高い。一方で、現実にはよくあるケースだが、様々な理由から利用できるサンプル数が少ない場合に、サンプルに基づいて訓練データの「水増し」を行う手法も提案されているが、それが正当化できるのもサンプルの集団の持つ統計的な分布が一定の性質を持っていることが前提となる。そうしたことを踏まえた時に、「マーラーの作品の学習実験」という設定がそもそも「学習」のタスクとしてどういった位置づけになるのかを考えてみる必要が出てくることになる。

     ここで具体的に、或る特定の作曲家の作品を入力として、その作曲家が書いたかもしれない架空の作品を自動作曲する場合を考えると、例えばそれがバッハやモーツァルトのように数百から千を超える数の膨大な作品が遺され、かつその作品の様式が或る程度の多様性はあるにしても程々に安定している場合には、時代様式を対象とした学習の場合とほぼ同様に考えることができるだろう。だがマーラーの場合は良く知られているように、まず遺された作品数が少なく、多楽章形式の作品について楽章毎に1とカウントしてもその総数は3桁に満たないレベルである。更に言えば、特に交響曲楽章には長大なものが含まれ、その内部の構造も錯綜を極めるため、内部構造に従って分割をしたものをサンプルとして与えることで或る程度の「水増し」が出来たとしても、今度はその個々のサンプルのもつ性質の多様性が「学習」を困難にする。加えて現実的なニューラルネットのサイズや計算リソースの制限もあって、優れた結果を数多く出しているとされるGoogle Magentaにおいても、生成される「楽曲」のサイズとして標準的に想定されている規模は、マーラーの作品であれば「断片」レベルのものに過ぎないし、いわゆる楽式レベルの巨視的な構造をMagentaに事前に用意されたモデルに「学習」させることは、仮にそれが理論上は可能であったとしても、現実に私が利用可能なリソースを考えてしまえば実現不可能な企てに見える。

     予め人間が学習すべき特徴を分析し、それに基づいてネットワークの構造と規模を設定し、入力データを前処理して学習を行うという従来のやり方ではなく、特徴の空間の獲得そのものを機械にやらせるという点が深層学習のブレイクスルーの一つであるとされるが、実際にそれが実現されたのは画像のような静的なデータを対象とするCNN (Convolutional Neural Network)のようなケースであって、音楽作品のような時系列データは、そもそも学習のために用いられるネットワークのモデルが異なる。ここでの技術的な進展は、従来はネットワークのノード間を伝播する信号が急激に減衰したり増幅したりするために困難であった長い系列のデータの学習や、系列中の隔たった時点の間に存在する構造を捉えることを可能にするメカニズムの追加である。古典的な時系列データ用のネットワークはRNN (Recurrent Neural Network)と呼ばれるフィードバック機能を実現する回帰構造を備えたネットワークだが、そこに幾つか制御を行うユニットを付け加えたのが技術的な進展の実質である。更にいわゆる古典的な時系列分析の対象は一次元の時系列データであるのに対して、(特に西欧の)音楽作品ではある時点で複数の音が鳴ることが普通であり、水平的な次元だけでなく垂直的な次元の考慮も必要であるが故に、更に問題の難易度が上がって複雑なモデルと膨大なリソースが要求されるという点も指摘できるだろう。

     こうしたことを踏まえて、様々な試行錯誤の結果ここで最終的に選択された方向性は、「学習」が備えているべき「汎化」能力の獲得は一先ず目指さず、様式的に或る程度均質なサンプルを用意して、それを用いてモデルを訓練し、サンプルの一部をキューとして与えた時にサンプルとよく似たフラグメントが生成できるかどうかを確認するというものになった。そしてその結果として、ここで報告する実験の実質を「マーラーの作品を素材とした人工知能による模倣の実験」と規定するのが適切に思われたのである。こうした点をこのように長々と注記するのは、それ自体は参考になり、今回の実験を準備したり進めたりするにあたっても少なからぬ恩恵を被っている、Web上で読むことができるGoogle Magentaを実際に動かしてみた経緯を報告してくださっている記事の多くにおいて、こうした点についての考慮がなされておらず、「環境構築して、データを食わせて訓練させることができた。訓練したモデルで楽曲を生成したらこんな感じだった」といった内容の報告がなされることが多いように見受けられることへの反応といった側面がある。結局のところそれは、生成した出力を評価しているとはいえ、あくまでのその重点はツールとしての評価にあって、そのツールを使って行ったコンテンツの方はあくまでもサンプルといった捉え方をされていて、だからそれは機械学習ライブラリの評価であって、或るデータを或る目的で機械学習を行った実験そのものの評価ではないのだ。それこそがまさに「工学」であるからには仕方ないこととはいえ、結果として「人工知能」を使った「学習」の肝心の「内容」が論じられることが極めて稀であることへの違和感を感じることは避け難い。他方で「内容」の方にフォーカスがあたった場合、―別の記事で取り上げた、デイヴィッド・コープの一連の実験がそうであったように―今度は出力結果が「似ているか」どうかが専ら議論されることが専らのようだが、そうであればそれは、汎化能力を持っている場合でさえ具体的な特定作品の模倣ではないだけで様式の模倣には違いなく、それならば端的に「模倣」と言えば良いということになる。

     だがそれは単なる言い方の問題に留まらない。マーラーのような過去の作曲家の場合、未知の作品が新たに「発見」される可能性が全くないとは言えないものの、その作品リストは確定しており、既に閉じていると見做される(時代を遡って、例えばペルゴレージの場合のような大量の偽作の存在により、真正な作品のリストが確定しない場合もあるが、マーラーについては該当しない)。そうした有限の作品を入力とした「学習」を行ったモデルの汎化能力は、どのような尺度で測られるのだろうか?通常の「学習」の場合には、サンプルのうちの一部を訓練データとし、それ以外を評価データとして、訓練データには含まれないサンプルを精度良く推定できるかどうかによって測定することになっているし、そうした検証を経たモデルは、実際に新たなサンプルが追加された場合の予測にもちいられることになるのであって、閉じていない。勿論、マーラーの作品の場合でも、或いは今回のように、そのうちのある楽章のみをサンプルとした場合にも、実際に実験でそうしたように一部の作品、あるいは楽章内のある部分を訓練データとし、それ以外を評価データとして評価すれば良さそうに見える。だが形式的には成り立ちそうに見えるアナロジーは、具体的なマーラーの作品に即して考えた途端に危ういものに感じられてくるように思われるのだ。マーラーの作品のある部分を用いた訓練の結果で、それ以外の部分を生成できるというのは、偶々後者が前者の再現であったり変奏であったりする場合(実は、今回の実験はまさにこの場合に該当するようにデザインされたのだが)を除けば、そもそもナンセンスではなかろうか?繰り返しを厭わずに言えば、バロック期や古典期の多くの作曲家、ロマン派以降でも自分の過去の作品をそのまま転用したり、若干の焼き直しをした上で別の作品を作りだすような自己模倣的な作曲法をとるような場合であればそれも可能かも知れない。だが、ことマーラーの場合についてはうまく行かないのではないか。これは何も機械学習の実験の素材としての仮定の話ではなく、現実の問題でもある。マーラーの場合なら未完成の第10交響曲の補筆完成を考えてみればよい。その補筆がマーラーのそれ以外の作品を入力とした「学習」によって可能であるというようには誰も思わないだろう(カーペンターによる補作のように過去の作品の「引用」を散りばめるのはまた別の話だが、カーペンターのそうしたやり方がマーラー「らしい」かどうかについて疑念を持つ人は少なくないだろう)。第10交響曲については、それがマーラーの最後の作品であり、(ありうべき)未来を推定することの困難が原因だというのであれば、初期のピアノ四重奏曲の補作はどうだろうか?そこではシューベルトの「未完成」交響曲のように完成したソナタ楽章とともにスケルツォ楽章の断片が残っていて、24小節からなるその断片に基づきシュニトケがその楽章を「完成」させたことは、その断片を自作の交響曲第5番=合奏協奏曲第4番の第2楽章に「引用」していること同様、良く知られていることだろう。或いはマーラーの場合には他には思い当たらないが、一時期脚光を浴びた「交響的前奏曲」のような存疑作(私個人としては、これをマーラーの作品とは見做しておらず、作品リストにも含めていないが)を思い起こしてみれば良い。通常の問題設定では違和感を感じない「学習」という言葉が、マーラーの作品という個別の場合に限って言えば、さまざまな違和感を呼び起こすように私には感じられる。結局のところ、それにはマーラーの作品によって構成される抽象的な特徴空間の性質が関わっているのであろう。それは知る限り未だかつて定量的測度を備えた仕方で定義されたことはないが、定性的で極めてラフな仕方でならば、既にアドルノのマーラーモノグラフの中で、しかも興味深いことには1つならず2つまでも、しかもいずれもマーラーの同時代の証言の伝聞とともに書き留められていると私には思われる。即ちその一つ目は「III.音調」の章において、シェーンベルクの証言として、マーラーの存命中に「ある著名な批評家が彼の交響曲を「巨大な交響的寄せ集めメドレー(ポプリ)」にすぎない、と非難した」(龍村訳のp.48の最初のパラグラフ)との伝聞であり、もう一つは「IV.小説」の章においてグィド・アドラーの言葉として引用されている「いまだ誰も、たとえ敵対者でさえも、マーラーを聴いて退屈したことはない」(龍村訳のp.83の冒頭)という指摘である。後者の参照の直前でアドルノ自身は「小説と同様、彼の交響曲の一つ一つが、特殊なものという期待を贈り物として呼び覚ます」(同訳書p.82~3)と述べているが、そうした性質を持つマーラーの作品の集合が統計的な扱いに対して抵抗を示すであろうことは、ここで報告する実験をした経験の中で得られた感覚と一致する。のみならず、以前に実施して別の記事で報告した和音の出現頻度をはじめとしたマーラーの作品の幾つかの特徴量についての集計・分析での感覚とも一致する。であるとするならば、それを感覚などと言っていないで、それらの関連の具体的な様相を調べるべきだろうが、これは後日の課題としたい。

     更にこれは、全くの個人的な文脈での偶然に過ぎないが、テンプル・グランディンの『自閉症の脳を読み解く』(中尾ゆかり訳、NHK出版、2014)の中で、自閉症の人の視覚についての研究の結論を参照しつつ、自閉症スペクトラム障碍のデータのエラーバーの大きさについてコメントしている箇所(上掲書, p.153)のことを思い浮かべた。そこでグランディンは自閉症に関する調査についてまわる困難として、調査対象の中に大きな差異が含まれていること、だがそれは研究における問題設定の仕方の問題であること、その故に、サブグループを見つけて分ける必要性を述べているが、マーラーの作品についても同じことが言えるのではないかというように感じたのである。その意味でマーラーの作品は、人間が産み出したものよりも寧ろ、人間自身に近い性質を持っているのではないか、更にそれはアドルノの言う「特殊なもの」に通じ、そのことは「小説」や「物語」の主人公である自己意識を備えた自伝的自己に対応した構造をマーラーの作品が備えているということに帰着するという道筋が思い浮かぶ。そしてこのことはマーラーの音楽が、このブログにおいて永らく構想してきた「意識の音楽」であるという主張そのものに他ならない。だがこの点は本稿の目的である実験の報告とは最早別のテーマであり、この点を更に展開して構想の肉付けをすることは、後日の課題としてここでは一旦打ち切らざるを得ない。

     更に言えば「学習」を「模倣」に置き換えたところで、実はこの問題の或る側面については解決は望めそうにない。有限で列挙可能な「マーラーの作品」が存在していて、恐らくマーラーの場合に限れば、未知の真作が発掘される可能性はほとんどないというところに、既知の「マーラーの作品」には含まれない「マーラー風」を自称する作品が出てきたとき(これもまた仮定の話ではなく、デイヴィッド・コープの事例のように現実の問題なのだが)、一体その「模倣」の出来を評価する尺度はどのようにして構成できるだろうか?実際、世上「マーラー風」と形容される作品は少なからずあるようだが、そもそも「マーラー風」「マーラー的」という形容は、マーラーの作品の或る一面と共通性を持つという意味合いで用いられることが一般的であって、それはここで報告する実験の水準で当否を扱うことができるものではないだろう。他方で「…風に(à la manière de ...)」という、パロディであることを明示したジャンルが存在するが、そこでは特定の作曲家の様式は或る種の「記号」としてメタレベルで機能しているのであって、それもまたここで報告する機械学習における「模倣」とは異なった水準のものであろう(それが「パロディ」として成立するには、所謂「贋作」とは異なった何かがそこになくてはらないが、機械学習における「模倣」は寧ろ「贋作」に近く、例えば「アルビノーニのアダージョ」と称する模作に類似すると考えられる)。後述の実験についての具体的な記述において明らかになることだが、寧ろここで「模倣」と呼んだものの実質は、時系列データとしての音楽作品の一部を「記憶」しそれを与えられたキューに基づき「想起」することに近いのではなかろうか。それは記録媒体に「記録」したものを「再生」することは異なるメカニズムに基づいており、変形や欠落を生じる可能性の一方で、「学習」における「汎化」とは異なったレベル(但し、このレベルの近いは、それを実現するメカニズムの違いを意味しない。メカニズムは同一であっても構わない。)でエラーに対する補完を可能にする頑健性を有することで「模倣」を実現しているという言い方が可能だろう。

     ちなみに上記の「記録」の「再生」と「記憶」の「想起」の差異は、機械が「知的」であるための条件としてアラン・チューリングが示した可謬性に関わっていて、適応的な機械が「正しい」かどうかの判定基準は文脈依存で客観的には決まらず、必ずどういうサンプルを与え何に適応させたかを基準に測るしかないというところから、知的であることの判断基準は結局人間の側にしかないという認識に繋がっており、結果としてここでの「学習」の成功の度合いや「模倣」の出来を評価する尺度に対する答えの枠組みとなる。チューリングはここからチューリング・テストに至ったわけだが、そのことが「学習」の成功度合いや「模倣」の出来は生成された音を人間が聴いて主観的・感覚的に評価するしかないという結論に繋がるわけではないことに注意すべきだろう。そうではなくて、何のために「学習」なり「模倣」なりをするのかという目的、実験自体が置かれた文脈抜きに測度を構成できないということであって、「学習」なり「模倣」なりを自己目的化した実験は、実はおのれの抽象性故に評価の基盤を自ら破壊してしまっていることに気付くべきなのだ、ということに他ならない。

     自分が開発したソフトウェアが生成した音楽の評価に対するデイヴィッド・コープの不満は、それ故二重に不当なものに見えてしまう。まずそれは自分の実験の枠組みの、上述の意味合いでの救い難い抽象性を棚に上げて、自分で破壊した評価基準の不在を評価者に不当に押し付けているに過ぎないし、次に自分が開発したソフトウェアが生成した音楽のみを聴かせて、どういうサンプルを与え何に適応させたかを示すことなく評価を求めるという姿勢の不当さを棚に上げて評価者の反応を批判するのも責任転嫁であると言わざるを得ない。以下にも述べるように、この実験結果を公開することを決断した背景の一つは、まさにデイヴィッド・コープが自分が開発したソフトウェアが生成した「マーラー風」の作品を少なからず発表していることを知ったからなのだが、私の公開の目的は、コープの「マーラー風」作品との結果との「優劣」の比較ではなく(工学的な評価としては、コープの業績に異を唱える人はいないだろうし、情報工学者であると同時に作曲家でもあるコープの業績に対して私のようなアマチュアが付け焼刃の俄か実験をもって何かを言う事自体、こちらはこちらで不当で、身の程をわきまえない暴挙であろう)、寧ろコープがマーラーを素材にしてやったことの「全体」に対する疑問の表明にあり、謂わば「メタ批判」であることをここで明記しておきたい。

     最後に今度はマーラーの側からではなく、機械学習の側からの釈明をさせて頂くならば、端的に実験結果のみを知りたい方にとっては煩わしいだけかも知れず、その場合には本稿末尾の実験結果の紹介までスキップして頂いて構わないが、まずもって機械学習を専門とする研究者でもなく、マーラーの音楽を研究対象とする音楽学者でもない、単なるマーラー音楽のアマチュアが、ごく表面的にGoogle Magentaを試したという前提抜きで実験結果として生成された音響のみを評価されてしまうと、色々な意味でミスリーディングであるという懸念がある。最も端的には、ここで報告する実験の生成結果自体は「出来の良い」ものではなく、だがそれはGoogle Magentaに代表される人工知能の技術的限界を示すものではなく、多くは更に改善の余地があるに違いない。ではなぜそのような箸にも棒にもかからないレベルものを敢えて公表するのかについては、ここまでお読み頂いた方に対しては既に十分にお答えしたつもりでいる。釈明の必要性自体、結局のところ背景と目的の説明は欠かせないということでご了承頂く他ないと考えるが、一つだけ記しておきたいのは、MIDIファイルを解析するプログラムの自作(C言語を用いて行った)から始まって、一通りハンドメイドでMIDIファイルを用いた和音の出現頻度などの集計・分析の仕組み(主としてExcelとS言語を用いて行った)を作るきっかけは、着手時点では先行事例を知らなかったから、知りたいと思えば自分でやってみるしかなかったからであり、だがその後、作業を進めていくうちに、類似の研究があることは確認できたものの、ことマーラーの作品を対象にしたものとなると、現時点でも確認できていないのと同様、ここで報告するような実験の報告のようなものを目にしたことがないということである。勿論、マーラーの作品の人工知能による模倣は既に行われて結果も示されているし、この手の話には格好の題材であろう第10交響曲の補筆完成版の作成を人工知能で行った結果が披露されたという報せを知らないわけではないことは、既に本ブログの過去の記事「デイヴィッド・コープのEMI(Experiments in Musical Intelligence)によるマーラー作品の模倣についての覚え書」でも報告している通りだが、そこで私が個人的に不満なのは、既に述べた通り、人工知能が「創作」したとされる「結果」のみが示され、それがマーラーの音楽に「似ているかどうか」のみが論じられるという点である。そこでここでは、どのようなことを考え、どのような準備をして、どのような条件を設定して、どのようなプロセスで処理がなされた結果、どのような結果が得られたかの詳細についてここまで報告することもまた、実験結果自体と同様に意義があると考えていることをお断りして、背景についての説明を終えることにする。

     なお、上述の背景の説明から、マーラーの作品の「模倣」の実験は可能だが、「学習」の実験は意味がないと考えていると受け止められてしまうかも知れないが、実際にはそういうことではないことを最後にお断りしておきたい。機械学習の対象として捉えた場合にマーラー固有の問題として思いつくのは、作品数が少なく、しかも様式的に多様で、作品・楽章間での多様性が大きいということだろうか。例えばバロック期や古典期の作曲家や、近年ではポピュラー音楽におけるようにある程度決まったパターンに基づき、消費のニーズに応じるべく大量に作品を「生産」「製造」するようなケースと比べれば、「マーラーの場合」が機械学習に馴染まないのは直観的には明らかなことだろう。作品の完成度に拘るスタイリッシュな寡作家というわけではなく、単純にシーズン中は歌劇場監督としての職務の多忙から、パートタイムの「夏の作曲家」たることを余儀なくされたという事情(それゆえ彼の作曲活動は、楽長の道楽として揶揄されさえした)に由来する作品数の少なさのみならず、アドルノが「マーラーがいつもどのように作曲するかは、伝来の秩序の原則にではなく、その曲独自の音楽内容と全体構想とに従っている。」(アドルノ, 『マーラー 音楽観相学』, 龍村あや子訳, 法政大学出版局, 1999, p.56)と言う「唯名論的」(同書, p.83)な傾向を踏まえ、「作品のいずれもが以前に書かれた作品を批判しているということにより、マーラーはまさに発展する作曲家となっている。言うならば、彼の量的には決して多くない作品にこそ、進歩ということを語ることができる。」(同書, p.111)というアドルノの見解を受け入れるならば、「マーラーの場合」の特徴は、そもそも統計的な処理に馴染まない性質のものでさえありうる。

     だがそれでもなお、そうした傾向が結果としてミクロな系列が持つ特徴となり、その特徴を検出し、学習することでマーラーの独自性、「マーラーらしさ」を言い当てることが可能かも知れない。数は少ないとはいうものの、マーラーの作品全体の量を、例えば小節数や演奏時間という尺度で捉えたならば、統計的な学習を行うに十分な分量であるという見方も可能だろう。(単純な比較ができないことは断った上で、例えばGoogle MagentaのPolyphony RNNモデルのモデルケースであったバッハのコラールへの和声付けに基づく学習に用いられるサンプルの規模と比べて、量的に少ないということはないだろう。)既に別のところでは、いわゆる「スモールデータ」でも適用可能な分析ということで主成分分析等のような手法を用いて、和音の出現頻度という、ごく表層的なテクスチュアに関する特徴量だけからではあるが、マーラーと他の作曲家の作品の比較やマーラーの交響曲作品の間の比較を試みた結果を別の記事で公開している(その概要については、記事「MIDIファイルを入力とした分析:データから見たマーラーの作品 これまでの作業の時系列に沿った概観」を、その結果の要約については記事「MIDIファイルを入力とした分析:データから見たマーラーの作品 和声出現頻度の分析のまとめ」を参照)が、そこから更に、そもそもアドルノの上記の主張の裏付けとなる結果をデータ分析から得られないかというアプローチも考えられるだろうし、そこから更に踏み込んで、特にその後期作品について、ベルクやベッカーの言葉を踏まえてアドルノが「(…)マーラーだけに、アルバン・ベルクの言葉によれば、作曲家の威厳の高さを決定するところのあの最高の品位の後期様式というものが与えられる。すでにベッカーは、五十歳を過ぎたばかりのこの作曲家の最後の諸作品がすぐれた意味での後期作品である、ということを見逃さなかった。そこでは非官能的な内面のものが外へと表出されているというのだ。」(p.112)と述べている点について、それに対応する何らかの特徴量を検出できないかという問題設定を行うことで、マーラーの音楽における「老い」について実証的な仕方で語ることさえ可能かも知れない。

     要するに特定の楽曲、例えばここで取り上げられている交響曲第3番第6楽章の主要部分「っぽい」作品を生成することを目的とした「学習」ということならば、こちらは統計的な「学習」の問題として設定しうるかどうか、そもそも問題の設定の水準において疑問の余地がないとは言えないということなのであって、一般に「学習」の問題が設定できないと言っているわけではない。実際、本稿執筆後、問題設定を変えて、1曲毎の規模が小さい歌曲については、全歌曲を一まとまりとして見て、交響曲については各交響曲毎に、Magentaで用意されたツールを用いて訓練用/評価用データを抽出したらどうなるのか、抽出されたデータを用いて訓練したらどうなるのかという実験は継続して実施しており、その結果については別途公開の予定である。(2022.7.7 公開, 7.16 語句の調整。22.11.12誤字修正および若干の補足を加筆, 2023.3.9-10追記, 独立の記事として本文から独立)