2018年4月26日木曜日

機械学習をやる前に学んでおくべき最低の数学

このエントリーをはてなブックマークに追加
Pocket

機械学習を勉強する前に学んでおくべき最低の数学の範囲について、あれこれ議論されている*1。この手の議論、なかなか不毛である。ライブラリをブラックボックスとして使う分には、数学の知識はほぼ不要。中身を考えながら使うには、大学の学部の微分積分と線形代数と確率・統計の教科書をまずは頑張れと言う自明な話になるからだ。

1. ライブラリの利用に数学はほぼ要らない

本当にライブラリ利用者としては、数学の知識をほとんど要求されない。例えばSVMの分類器を構築するのに、プログラマが指定する必要があるのは、分類先と識別のための特徴量が入った学習データと、データの項目間の関係を説明する文、チューニングするのに使えるオプションが幾つかあるぐらいだ。オプションは経験的に精度が良くなるように選ぶ。これはランダムフォレストなどでも同じになる。

ディープラーニングのライブラリ、TensorFlowだと行列形式の乗算と加算を使って入力層、隠れ層、出力層の関係やコスト関数の記述を行なっているが、基本的にはそれだけである。また、行列演算は写経的なようだ*2。数字識別データ識別(MNIST)用の上級チュートリアルを見るとパフォーマンスを出すために、行列の次元やサイズ変換しつつ階層構造を複雑にしているのだが、線形代数の演習問題の操作とはかなり異なる。別の概念だと思っていても、問題ない。

2. 厳密に理屈を理解する必要性も低い

理屈を何となく理解するのには、図を見るぐらいで十分かも知れない。数種類のデータがプロットされたグラフの間に境界線が引かれている図がよくあるが、SVMの利用に関してあの図で分かる以上の深い理解が役立つのかは謎だ。識別率が上がる良い特徴量を探すのが主戦場で、SVMの中がどうなっているかは気にされない。

以下は深層学習以前のニューラルネットワークのユニット数と分類器のパフォーマンスを示すために作ったグラフで、薄い破線が真の分類、青と赤の点が学習データ、太い青線が学習した分類を表すが、ユニット数が少ないと排他的論理和をとるような学習ができず、ユニット数が多過ぎると過学習になって逆に真の分類から遠ざかるのは、何となくは理解できるであろう。

深層学習のTensorFlowも、階層モデルの設計が重要で、行列演算を頑張るモノでは無さそうだ。また、チュートリアルをこなして図を見たら理解できたような話も見る。そもそも応用に当たり、数学的な理屈で精度を上げているようにも思えない*3

誤差と言うか損失を最小化する極値が探すアルゴリズムが使われているのを理解するにしても、損失をプロットしたグラフを見て、そのグラフの一番底が大域的最適解になること、グラフがデコボコになっていると途中で引っかかって局所的最適解になりうるぐらいの理解で十分では無いであろうか。最適化アルゴリズムを自分で実装しない限り、ブラックボックスになる。

3. 始める場合は、学部の一般教養の微分積分と線形代数から

既存のライブラリを使えないなどの理由で、理屈をもっと厳密に知りたいときもあり、この場合は数学が必要になる。

入門レベルの教材*4を見れば分かるが、大学の学部の一般教養の微分積分と線形代数*5が最低限の知識になっている。条件付確率が出てくるし、最尤法の発展のような仕組みになっているので確率・統計の知識もあった方が良い。厳密にはベクトル解析の知識も要るが、こちらはグラディエントとヤコビアンぐらいを知っていれば誤魔化せると思う*6。何だかんだ言っても学部の教育内容は後のことを考えているのか、学部の教育内容を土台に先端技術が構築されていっているだけなのかは定かではないが、工学分野のだいたいのテキストで要求される数学知識と変わらない。

勿論、上の最低限の知識で済むわけでもなく、やろうとする事に応じて必要な水準や範囲は上がっていく。数式で書かれた最適化アルゴリズムを実装するには、その数式の意味をとるだけではなく、数値微分や数値積分の知識が要る。多変量のテイラー展開の証明ができて、ヘッシアンが半負定符号であることが極大化のための必要条件、負定符号であることが十分条件であることを示せるぐらいであれば、何とか前進していけるのかなと思うが保証は無い。論文を読むには、もっと高度の知識が要る事もあるであろう。発展的なことを目指すのであれば、必要最低限云々を考えるのは単なる甘えである*7。私はついていけないが(;´Д`)ハァハァ

4. まとめ

教師付機械学習について考えてみたのだが、教師なし学習でもライブラリを利用する分には同様にブラックボックスで問題になることは無い*8。統計解析などでもブラックボックス的に使っている人はかなりいるし、統計学を広まったのはブラックボックス的利用が可能になってからと言う話もある*9。解釈を与えないといけない統計解析と違い、精度を見ればパフォーマンスの差が出る機械学習においては、なおさらブラックボックス的な利用は否定されないはずだ。それでも深淵を目指すと言うのであって、かつ機械学習の入門テキストを読んでもよく分からないと言うのであれば、学部の微分積分と線形代数と確率・統計の理解から始めよう。嗚呼、当たり前すぎる結論だ。

*1機械学習をやる上で線形代数のどのような知識が必要になるのか ? 原理的には可能 ? データ分析界隈の人のブログ、もとい雑記帳

機械学習をやる上で必要な数学とは、どの分野のどのレベルの話なのか(数学が大の苦手な人間バージョン) - 六本木で働くデータサイエンティストのブログ

*2三次元グラフィックスのプログラミングの場合でも、アフィン写像や四元数を用いた変換処理が写経な人は少なく無いようだが、それで困っているかと言うとそうでも無さそうである。

*3頭文字がGの米大手IT企業などでは違うかも知れないが、深層学習をする前の前処理がパフォーマンスを大きく決定すると言う話もあるし、ディープラーニングのパフォーマンスに大きく貢献していたのは実は…では無く~のような研究成果も伝わってくる。

*4情報処理学会誌「情報処理」の2015年5月号の特集「いまさら聞けない!コンピュータの数学」の第3節の「機械学習のための数学」を主に参照した。なお、栗田多喜夫「サポートベクターマシン入門」でもだいたい同じような記号や概念が使われている。

*5ムーア=ペンローズの擬似逆行列のように、学部の教科書に載っていないものが必要と言う言説も見かけるが、都度、検索すれば間に合うであろう。

*6観測範囲では、テンソルと言っても多次元行列ぐらいの意味でしか使っていないし、ストークスの定理などが出てくるわけでも無い。

*7ITエンジニアとかコード書くような仕事に就こうと思ってる学生さんは、たくさん勉強しろ - Togetter

*8分類器の精度で評価すればよいとは行かなくなるので、アウトプットの解釈と言う意味では数理的な特徴を知っていないといけない。

*9統計学を拓いた異才たち」(P.48)に定理を省いた実践テキストの『研究者のための統計的方法』が農学や生物学分野の研究者に多大な影響を与えたとある。

0 コメント:

コメントを投稿