【生成Deap Learning 第2版】11.1~11.2

>100 Views

June 19, 25

スライド概要

profile-image

AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

2025年度 前期輪読会 #9(2025/06/19) [生成Deep Learning] 第11章 音楽生成 (11.1~11.2) 京都大学 経済学部 3回 大澤 衡正 0

2.

アジェンダ ◼ 概要 ◼ 問題設定 ◼ 学習・結果確認 ◼ 発展的な話題 本スライドの内容の実装は下記のレポジトリで公開しています https://github.com/OsawaKousei/music_generation 1

3.

概要 音楽生成というタスクの特徴点と今回取り組む基本的なアイデアを説明します 音楽生成の特徴点  音楽の時系列構造を学習し、次の音符を確立の離散集合から選択する必要がある ↑これはテキスト生成と同様だが、↓はこれと異なる点である  音楽は多くの場合ポリフォニック(多旋律)であり、複数の並行するストリームを有する  各楽器の音符の変化は同時に起こるとは限らず、 1つの楽器が同じ音を発している間に別の楽器は音符を変えるといったケースが想定される ⇒一度に1単語づつの処理を行えたテキスト生成とは大きく異なる 音楽生成のためのトランスフォーマー 今回はOpenAIのMuseNetに着想を得たデコーダートランスフォーマーを使用します 元来のトランスフォーマーは系列データ長Nの2乗の計算量を要しますが、 音楽生成では曲の長期構造を保って作曲させたいので、これは不都合が大きいです そのため、今回はSparse Transfomersという計算量を改善したトランスフォーマーを用います 2

4.

問題設定 音楽生成タスクの問題設定について説明します 音楽生成は次にくる音符を予測するタスクとしてとらえることができます 例えば、下の楽譜(バッハの無伴奏チェロ組曲第一番の出だし)の次の音符は何でしょうか? ヒント: 小節という概念があり、これは少ない決まった数の拍を含む音楽の単位です。 楽譜上の五線譜を縦断する縦線によって表され、ここでは1小節は4拍ですね。 3

5.

問題設定 今回用いるデータセットとその前処理について説明します データセット 今回使用するデータはバッハによるチェロ組曲のMIDIファイルのセットです music21というライブラリを使用することで、これをパースし、可視化や構造化が行えます これを用いて音楽データを音符と長さの組み合わせとして表現します トークン化 音符と長さをそれぞれトークン化します 全体の流れは⇒のようになります 4

6.

問題設定 最後に、訓練データの作成方法について説明します 訓練セットはスライディングウィンドウの手法を使って、 音符と長さの文字列を50要素のチャンクに分けることで行います。 トランスフォーマーはウィンドウ内の要素を与えられ、 1ステップ後の音符と長さを予測するように訓練されます 5

7.

学習・結果確認 オートエンコーダのキーとなるアイデアとアーキテクチャについて説明します 位置埋め込み 長編のコンテンツ生成に適した正弦波埋め込みを使用します Embedding層を用意するやり方と異なり、 ベクトルの最大長Nを定義する必要がありません 位置埋め込みの可視化 - トークン埋め込み - 位置埋め込み - トークンと位置の埋め込み アーキテクチャ図 モデル 入出力には音符と長さの2つが必要です 今回は個々の埋め込みを結合して与え、 出力を全結合層で取り出す、 という方法でこれを実現します 6

8.

学習・結果確認 実際にモデルを学習させて、その結果を確認してみます エポック数 楽譜 分析 1 非常に単調な曲が生成されているが、 ランダムに弾くよりは曲に近く感じる 10 音符の密度が上がり、繰り返す旋律が現 れる、作曲している感じになってきた 20 10エポック目より落ち着いた曲調になっ たが、旋律は洗練されてきている 50 余り改善を感じないが、強いて言うなら リズム感が良くなった気もする 100 それらしいものが生成された 私よりは作曲がうまいだろう 7

9.

学習・結果確認 モデルの学習結果を分析してみます 各時間ステップでの予測分布を ヒートマップで可視化(100 epoch) 書籍の図と比べてさらに確信度が強まっているが、 単に過学習しているだけのようにも思える アテンションの可視化(100 epoch) キー、拍子、休符に関する傾向は本書と同様 Dマイナーキーへの注意がより強化されている 8

10.

発展的な話題 多旋律の音楽に対応するためのグリッドトークン化という手法を紹介します 右図のように複数のパートに分かれた音楽を グリッド上に書くことを考えます グリッドのy軸は音程を表し、 x軸は1ステップの時間経過を表します。 例えば左図では1ステップを16分音符として最初の楽譜をグリッドで 表示しています。 これのトークン化は各ステップの音程を単に並べて行います。 連続する長い音符が複数のトークンに分かれるケースがあるにも関わらず、 この方法は「驚くほど」上手くいくと本書では紹介されています。 欠点としては、1つの長い音符と隣り合う短い音符の区別が為されないこと、 不規則な拍子に対応できないこと(※1)、 ※1 1ステップの長さを短くすれば可能ですが、 音程と長さ以外の要素を追加することが難しいことが挙げられています。 計算量の観点から非現実的です 9

11.

発展的な話題 多旋律の音楽に対応するためのイベントベーストークン化という手法を紹介します イベントベーストークンとは、豊富なトークンの集合を持った語彙と言うことができます 例えば下図では次の3つのトークンで曲を表現しています • 与えられた音符の演奏を開始 • 与えられた音符の演奏を終了 • 与えられたステップだけ時間を進める イベントベーストークンの語彙には 別タイプのトークンを容易に組み込 めます 例えば、音符のダイナミクスやテン ポの変更などです 学習はグリッドトークンによるもの より複雑ですが、高い表現力を有し ています 10