カシミアのニット

カシミヤのニット

日々のメモです

The night, and the dream, were long...

はじめに

この記事はklis Advent Calendar 2017の21日目の記事です.

adventar.org

昨日はktmnさん(@piyopiyo_tititi)生活にアザラシを取り入れてから気が楽になった話 - 日記という記事でした. あざらし可愛いですね. 短気なので生活にあざらしを取り入れていきたいと思います.

kotori-tititi.hatenablog.com

さて,この記事の題目となっている"The night, and the dream, were long..."というセリフをご存知でしょうか.

"The night, and the dream, were long..."は,"Bloodborne"のラスボスの一人であるゲールマンのセリフです.

私(@lapis_zero09)は現在klis14の学生で卒業を間近に控えておりますが,大学生活は長いようで短く,夢のように過ぎ去っていきました. まだ残ったモラトリアムも有意義に過ごしたいです.

Bloodborneについて

さて,くさいセリフは置いておいてBloodborneは,FromSoftwareより出ているゲームです.

FromSoftwareは,Bloodborneの他に"DarkSouls"や"ARMORED CORE"などのソフトを出していることで知られています.

www.fromsoftware.jp

Bloodborneは,DarkSouls,及び,Demon's Soulsと並んでソウルシリーズと呼ばれ,その雰囲気やスタイリッシュさから壮絶な人気を博しています*1*2

また,Bloodborneは,"死にゲー"と呼ばれるほど難しく,かっこよさに惹かれ,始めたはいいものの途中で攻略を諦める人が後を絶ちません*3. しかし,その難しさを諸共せず,あるいは難しさに惚れ込み,四六時中このゲームのことを考えたり,プレイしたりする人間もおり,そのような人は地底人と呼ばれています*4

このBloodborneは,その他のFromSoftwareの作品と同様,ほとんどと言って良いほどゲームの世界観を伝えるNPCの台詞やムービーが無く,解釈の一切をユーザに委ねています. このことから,フロム脳を患うユーザが後を絶ちません. フロム脳とは,ゲームの設定を必要以上に考察してしまう精神病の一種で,重度の場合,現実世界の事象についても考察し始めます*5. フロム脳罹患者によるBloodborneに関する考察や2次創作は後を絶ちません.

フロム脳の発症者の中には高い技術力や文才を持った者もおり、こういった人々の解釈・考察・動画は作品の世界を更に広げていく可能性を持っているため、フロム脳をただの妄想癖と言って悪く決めつけきれないところがある。

出展:フロム脳とは (フロムノウとは) [単語記事] - ニコニコ大百科

前置きが長くなりましたが,この記事は何らかの形でBloodborneの二次創作を作成し,Bloodborneをより多くの人に知ってもらうと共に,Bloodborneを盛り上げ,フロム脳患者を増やし,あわよくばBloodborne2の発売を願うものです.

二次創作

そもそも私が,Bloodborneにハマったのは中の良い二人の悪いオタクが主な原因です. ある日,いつものようにたまり場にいる時,二人の悪いオタクが「お前もやってみろ」と私にPS4のコントローラを渡し,気づけば,無意識にBloodborneのことを考え,作業中にBloodborne考察動画を流し,また,大学から家までの道のりにある木の位置や階段の段数を考察するフロム脳の自分がいました.

そして,Bloodborneにハマった要因の一つに,"original soundtrack(以下,OST)の良さ"があります.楽団と聖歌隊によるコーラスによって重厚な曲は作業用のBGMに向いており,この記事の執筆時にも流しているほどです.

Amazon Musicにあるので是非聞いてみてください.

一方で,人間,同じ曲ばかり聴いていると飽きが生じてしまうもので,Bloodborneそのもののプレイにも支障を来すことになり兼ねません. OSTに含まれる曲数は限られ,ゲームの続編が出ない限りサウンドトラックが増えないことは想像に難くないでしょう.

なので,この記事では似たような曲を作ることを二次創作とします. しかし,私はピアノやギターは弾いたりするものの作曲に関しての知識は毛頭ありません. そこでその辺の機械学習ラボに属している私らしく機械学習によって作曲することを考えます.

作曲

まず,私が所持している音楽データは全てステレオmp3形式なので,音楽を学習・生成するニューラルネットワークを設計するために,ニューラルネットが理解できる形式に変換する必要があります.

皆さんご存知の通り,音波は連続的な信号であり,無限のデータ点に分割することが可能です. サンプリングでは,サンプリング周波数で決まる一定の時間間隔で信号の値を保存します. したがって,サンプリングによって無理やり有限のデータで連続信号を表すことを考えます. サンプリング周波数は44100Hzに設定しました. 一般的に,人間の耳は,20000Hzまでの周波数を聞き取ることができると言われています. したがって,20000Hzを超える周波数が存在しても,違いはないと想定します. また,Nyquist–ShannonのSampling Theorem*6によると,サンプリング周波数は20000Hzのほぼ2倍にする必要があります. したがって,44100Hzは理論的に学習可能なサンプリング周波数とみなすことができます.

次にステレオmp3をモノラルmp3に変換することで,音楽を空間性を持たないものに変換します. モノラルであるということは,例えばイヤホンで音楽を聞いた時,左右の耳から聞こえる音が同じであることを示しています. 簡単に言えば,モノラルサウンドは,ステレオサウンドを表現するために必要なマトリックスのサイズの半分で表現することができます. これにより,ニューラルネットワークを訓練するのにかかる時間だけでなく,必要なメモリも削減することができます.

しかし,モノラルに変換したと言えど,mp3は,圧縮形式であるというのには変わりなく,まだニューラルネットで学習するのに優れた形式ではありません. そこで,モノラルmp3をWAV形式に変換します. WAV形式は,FLAC以外に最も簡単に利用できる非圧縮オーディオであり,pythonライブラリであるscipyによって簡単に扱うことができます. これで,時間領域で圧縮されていないサンプリングされたオーディオ形式が得られました.

さらに,WAVファイルをニューラルネットが理解できるものに変換します. ニューラルネットに時間信号の異なる周波数をよりよく理解させるために,離散フーリエ変換(以下FFT)を使用して,時系列の複雑なデータを対応する周波数領域に変換しました. これで前処理の終わりではなく,FFTの出力は複素数の配列であり,ニューラルネットワークの入力にするために実数部と虚数部に分割する必要があります. また,時間が一致しないものはゼロパディングを行いました.

これにより,元のステレオmp3データは3次元のテンソルとして構造化することができました. この3次元マトリックスニューラルネットに与えることで音楽を生成します. これで前処理のタスクは終了しました.

次に発生する問題はニューラルネットアーキテクチャーをどう設計するかです. リカレントニューラルネットワーク(以下,RNN)は音声のような時系列データを扱うのに最適なニューラルネットワークです. シーケンスのすべての要素(このケースではテンソル)に対して,事前定義された操作を繰り返し実行するため,リカレントと呼ばれます. 重要な点は,次の一連の操作でも,前の計算の結果が考慮されることです. したがってRNNには情報を記憶できるmemoryがあることがわかります. 音楽データに対して考えると,ネットワークに一連の音符を与え,それはシーケンス全体を通って次の音符を予測します. しかしノーマルのRNNには,長い間情報を保持することができないという欠点があります. そこで,Long Short Term Memory(以下,LSTM)が提案されています. LSTMでは,セルと呼ばれる別のベクトルが情報を記憶するために用いられています. LSTMの大きな利点の1つは,学習する必要のあるパラメータの数が従来のネットワークに比べて少ないことです. 情報の転送・更新,出力の生成のための重みとして機能する基本的に3つの行列があります. 3つの行列は、シーケンスの各要素に対して操作を実行するために繰り返し使用されます RNNやLSTMに関するより詳細な情報はDeep Learning Book*7などを参照してください.

今回は,自前のGPUを使用したため計算的リソースは非常に限られており,浅いネットワークを構築しましたが,訓練には数日を要しました. モデルの生成と学習にはkerasを使用しました.

以下が生成した音楽例になります.

最初の方は良さげですね.

もっと潤沢なリソースで複雑なネットワークを扱うことでより皆さんの感性に合う音楽が作れるかもしれません.

最後に

明日は卒論の提出日ですが,最後まで気は抜けないのでそろそろ寝ることにします.

明日のklis Advent Calendar 2017はまっつんさん(@crc9dijo)の担当ですが,卒論の話が聞けるかもしれません.

おやすみなさい.


商品を買ってFromSoftwareを応援しよう!!