DAW悪戦苦闘記

DAWやMIDIを通じてちまちまとDTMを楽しむ記録+MIDI検定1級到達記

Courseraの機械学習入門講座雑感 (2)

前回記事の続き。今回は講義の中身に関して具体的な気づきなどを書いておこうと思う(ややマニアックです)。

daw-jones.hatenablog.com

講義内容に関して気になったところなど

Back Propagation

これが難解だという感想はよく見かけるのだが、要は計算がややこしいだけであって、基本的な考え方自体は割と単純だと思う。合成関数の偏微分が幾重にも入れ子になっている関係上数式の処理がやたらに煩雑なだけではなかろうか。

これは本講座ではきれいに整理された結果を簡潔明瞭に提示してくれているので、プログラミング課題ではその結果通りにコーディングすれば問題はなく、また実務レベルでは導出過程まで逐一なぞる必要はなかろう。結果の導出が気になる人は以下の資料などが参考なると思う:

Machine Learning Cheatsheet — ML Cheatsheet documentation

SVM

SVMの基本コンセプトそれ自体は大変わかりやすい解説がなされるが、その一方で kernel trick の説明はやや不十分に感じた。非線形性対応のための高次元写像というkernel関数の役目と援用理由についてちょっと説明不足で、一体何をやろうとしているのか趣旨がよくわからない、という印象を受ける。

ここは実務上それほど深く掘る必要はないとは思うが(通例使用するkernel関数は概ね決まり切っているので)、他の教科書をあたるか、またはネット上にわんさか転がっているチュートリアル動画や入門資料等を参照する必要がある。たとえば、以下のQuoraの資料などが参考になった:

What is the kernel trick?

PCM(主成分分析)

本講座では共分散行列から変数合成のためのウェイト・ベクトルを導出する方法が提示されており、これを特異値分解 (SVD; singular value decomposition) と呼んでいる。しかし他の教材では、共分散行列を経ずに元の特徴変数行列Xを直接分解して求める方法をSVDと呼称し、共分散行列のUV行列分解を固有値分解と呼ぶような例もある(こちら方が一般的であろうか)。ここは他書をあたるときにややもすれば混乱する可能性があると感じた。

あと、行列の添字とかタイポらしき混乱が少々あって、特徴変数行列Xの値を次元縮約して変換する数式の説明が若干わかりにくい。UV分解の結果、行列Uからk列抜き出してウエイト行列Wとして解釈すると X*W で新しい合成変数が m x k 行列として求まることがわかれば問題ないのだが。

なお、主成分分析が固有値問題に帰着することの証明・解説は割愛しているので、その辺をもう少し深掘りしたい人は別の資料をあたって理解する必要がある。個人的には以下の記事が参考になった:

blog.aidemy.net

異常値検知 (anomaly detection)

ここでは正規分布確率密度関数上の各一点をあたかも確率値のごとく解釈した使い方があり、ちょっと違和感を覚えたのだが実務的には問題ないということだろうか。本来確率は積分値で与える(定義される)はずなので、理論的に正当化できるのかどうか私にはわからず。この辺は一般的な統計仮説検定と分布の考え方や使い方が異なるように思う。

今後学習すべき領域(本コースでは足りないところ)

機械学習の基本理解と土台は本講座で十分過ぎるぐらい十分だと思う。ニューラルネットについてもいわゆる多層パーセプトロンまではカバーされるので、もっと高度なディープ・ラーニング手法を学習する出発点としてふさわしいレベルと内容である。

とは言うものの、一方で割とよく使われる方法・ツール等で割愛されたものも少なくない。これらは必要に応じて別の講座や教科書などで補足学習する必要があろうかと思う。

Pythonプログラミング

Octaveは研修やプロトタイピングならばともかくも、今日では実務で使われることはまずないようで、どういうパッケージを使うかも含めてPythonコーディングによる機械学習の実践演習が別途必要になってくる。

古典的な機械学習アルゴリズムやデータの前準備処理などについては scikit-learn が定番で、ディープ・ラーニングについては Keras を使用したプログラミングが標準的かと思う*1

Naive Bayes

ナイーブ・ベイズは非常に単純でひょっとしたら小中学生でも理解できるんじゃないかと思うぐらいだが(言い過ぎか)、テキスト解析ではいまだによく使われると聞いたことがある。

ベイズはさらに掘り下げるとベイズ統計学の広大な領域に踏み込むことになるが、データ・サイエンス一般では必須科目かもしれない。PyMC3 などのパッケージを使ったプログラミング講座があれば是非受講してみたいものである。

決定木 (Decision Tree)

特にその発展形でもあるアンサンブル学習の random forest は実務では頻繁に使われるようなので、実務家は勉強しておく必要はあろう。個人的にも非常に興味がある分野ではある。

ニューラルネットの発展とディープ・ラーニング

現在の花形であることは言わずもがな。音楽においても、MIDIデータのみならず音声・オーディオ解析でいろいろ応用の余地があるところでとても興味深い。

周知の通り、昨年夏に試用した Magenta の土台にもなっている。時系列データへの応用に適した RNN (Recurrent Neural Network) は Magenta でも使われており、音楽データの解析では盛んに使われているようである。

*1:バックエンドは Tensorflow とか CNTK などが代表的なものである。Theanoもバックエンド対象ではあるが、開発終了で命脈を断たれてしまったので今後の新規開発では依存しない方がよい。