※コードレベルのお話を期待される方はブラウザバック推奨です
はじめに
アクセスいただきありがとうございます。
この記事では、「機械学習ってどうやって実装するんだろう、一旦作ってみるか」というノリで作った学習モデルを作って、ものすごい勉強になった経験を書きます。
これに取り組み始めたときの私のスペックは、プログラミングを学び始めてから1年半ほど経っており、機械学習の事前知識は「教師あり学習とかあるんだなぁ」くらいでした。
「深層学習とか全然分からないけど、なんか作ってみたいなぁ」 という方は、ぜひ実際に取り組んでみることをおすすめします。
何をつくったのか
「楽器の音を入力すると、その楽器の画像が出力されるモデル」 をPythonで作りました(使ったライブラリはPytorch)。本当は「音声を入力したら、それが流れていそうな風景画像を出力するモデル」を作るつもりでした。画像から画像を生成するモデルや、テキストから画像を生成モデルはいっぱいあるのに、意外と 「音声」から「画像」を生成するモデル ってないなと思ったからです。かなり壮大なテーマで初心者の私には取り組めるイメージが湧かなかったため、目標を下げました。
使ったデータセット
どうやらモデルの作成には大量のデータが必要らしい。ということで、ネットで大量のデータを配布してくれいているサイトを探しました。選んだのは、「楽器を演奏しているYoutubeの動画のURLをJSON形式でまとめたデータセット」 です。Kaggleで探したかなと思います。「音声」と「画像」の対応が取りやすいだろうと考えて選びました。
参考にした論文
実装したいけど、ニューラルネットワークのモデルを自分で定義しないといけませんでした。流石に知見がなさすぎるので、論文を頼ることに。ネットで見つけた数少ない「音声」から「画像」を生成するモデルを扱った論文を発見できました。これはGoogle Scholarで探しましたかと思います。論文なんて1ミリも読んだことないですし、なおかつ英語だったので、DeepLを使いながら少しずつ解読しました。主に参考にさせていただいたのは、元々困っていたニューラルネットワークのモデル部分です。このモデルを基に、GANという形で実装しました。
音声データを「メルスペクトログラム」という画像データに変換し、それをさらに特徴抽出した「エンベディング」という1次元ベクトルの形にするという手法が用いられていました。音声データを扱う際には結構用いられる手法らしい…?
使ってみると
うーーん、ぐにゃぐにゃ。左から、クラリネット、アコースティックギター、ドラムです。これらの画像はまだいいほう。9割の画像は黒くなってしまったり、何が何だかわからない画像になってしまいました。
このレベルの画像が出力されるまで、何度もエポック数や学習率などのパラメータや、使用する損失関数を変えていました。機械学習って結構時間がかかるんですね…(取り組んだ3か月のうち2か月はモデル学習の実行時間だったように感じます)
最終的にはあんまりうまくいきませんでした。
勉強になったこと
・コードレベルでの実装方法
・記事の探し方
・座学って大事
コードレベルでの実装方法
私の中でぼんやりとした理論が 「コードレベル」 で理解できました。実際にプログラミングすることでアウトプットするのは一番理解が速いですね。もともと、「どうやって実装するのか」という疑問がありましたが、実際に作ってみることでこの疑問は大いに解消できました。また、実装とは少し違いますが、コードのバージョン管理でGitを使ったので、そういうのもいい練習になりました。ネットワークモデルのコードはChatGPTにも手伝ってもらいました。
記事の探し方
とにかく関連しそうな単語を並べてGoogleで検索していました。だいたいQiitaの記事を参考にさせていただいたと思います。ただ、どうしても日本語の記事が見つからないときもあります。そういうときは英単語で検索したり、学術論文検索エンジンというものがあると知ってからは、Google ScholarとかarXivとかで探すようにしました(そこで今回参考にさせていただいた論文を見つけました)。
座学って大事
今回実装してみて一番感じたのは、 「深層学習に対する知識がまだまだ足りない」 ということでした。「どのパラメータを変えたら、 理論的に どういう変化が期待できるのか」、「こういうパターンでは 数学的に こういう損失関数を使うんだ」とかです。
先ほど「何度もエポック数や学習率などのパラメータや、使用する損失関数を変えていました」と述べました。この非効率な時間はもっと座学と向き合っていれば短縮できたように感じます…
おわりに
私の興味で深層学習モデルの実装を行った話を述べさせていただきました。これらの実装に要する「コード」と「理論」は ネットにある情報のみ で学習できました。
「頑張れば初心者でもこのレベル感のモデルを作成できます。」
私の深層学習モデル実装の熱意とノリは、一旦燃え尽きました。初心者の自分としてはよく頑張ったほうだと思っています。座学とはもうちょっと向き合ったほうがよさそうです…
最後まで読んでくださり、ありがとうございました。この記事が誰かのためになるかはわかりませんが、深層学習初心者の同志の何かになれば幸いです。