機械学習への熱が冷めてきたという話

0.はじめに

エンジニアというものをアイデンティティの一つとして持っているので必要な自己研鑽として、新しい技術が世に出てきたらキャッチアップをそれなりにしているつもりである。もちろんどれもこれも習熟していくというのはどだい無理な話で、知っておくレベル、手を動かしてある程度出来るようにしておくレベル、実務に反映するレベル、と程度は色々であるが。
大抵の技術は、ネットの記事を読んで概要を把握して手を動かす。少し込み入っているなと思ったら関連書籍を入手してから手を動かす。それぐらいで大凡はイメージをつかむことが出来。そしていざ本当に必要になった時に再度しっかり勉強すれば、実際必要になっても困るようなことはほとんどない。
そういう感覚で機械学習にも臨んだ。ネットの情報だけではイメージがつかめなかったのでAmazonで以下の本をポチった。購入履歴にきちんと日付が残っている。

注文の詳細注文日: 2018年12月7日 (1個の商品)
TensorFlowではじめるDeepLearning実装入門 impress top gearシリーズ
新村 拓也

Kindle版であった。忘れもしない京都のバス停でポチってバスの中で読んだ。読んで、何が何だかさっぱり分からないというのが第一印象であった。
性格的に「出来ない」「分からない」ということがあるとずっと引っかかるタイプである。当たり前に手に負えもないもののの方がずっと多いので諦めるものもあるが、僕の「引っかかる」に機械学習が見事に引っかかった。

それからはがむしゃらにネットの記事をあさり、本も読んだ。でも全くイメージがつかめなかった。細部が気になり全体を見通すのが下手なのは僕の性格上の問題でそのせいもあるが、とにかくわからなかった。
一般的なIT技術というのはプログラムが主でデータが従。しかし機械学習は主従が逆なのである。これが掴めなかったのが時間が掛かった一つの理由かと今にして思う。
もがいている中で数理最適化という分野に出会った。数理最適化に接続出来てからは見晴らしが良くなり、本質的に理解する道筋が見えた。おそばせながら高校数学の復習などを始めたのもその頃である。統計学が必要であると言うこともやっとこさ理解が出来た。
それぐらいの時期にKaggleのTitanicもやって、以下の記事を書いた。
[Kaggle始めます]
https://qiita.com/hazigin/items/41070defabfb6a09023b

機械学習をコードレベルだけで無く、更に深く理解しようとすると出てくるパターン認識というものも簡単には腑に落ちなかったが、以下のスライドに大変助けられた。
[パターン認識と機械学習入門]
https://www.slideshare.net/mmktakahashi/ss-13694313

グラボが乗った強いマシンも買ってあれこれ試しつつ試行錯誤してコンペも色々やった。たった一つでたまたまではあるがProbSpaceで銅ももらえた。
社会人、なかなかしっかりと時間は確保しずらいが割と勉強を進めていた方では無いかと思う。

現状はおおよそそのような感じである。
そして今日も色々進めていこうと思ったが、どうも。。。

1.パワーゲーム

ChatGPTが大流行りである。僕は試していないが。ただ皆さんがChatGPTで遊んだ結果を見ているだけでChatGPTが異次元レベルの成果物であると言うことは分かる。また少し前からあるStable Diffusionは僕のマシンにも入れて色々試した。こちらも驚異的なプロダクトである。そしてそれ以外にもTwitterには日々革新的な技術が生まれていることを教えてくれるTweetが流れてくる。
これらの技術は大変高度な知識と技術とそして学識を持った方々の研究成果であることは間違いない。ただ実現するには高度な人材だけでは不可能で、もう一つ必要なものとして豊富な資金力がある。導入するには専用のサーバールームを必要とするGPUサーバーを好きなだけ使える、クラウドの高額になる構成のインスタンスを長時間回し続けられる、そのような資金力である。当然ながら個人で賄いきれる額ではない。現在、世の中に何かを問おうと思うならこのような豊富な資金を背景にしていることが必須である。

2.腑に落ちなさ(時系列問題を例えに)

機械学習で何かしら問題を解こうとするとしばしばついて回るのが「腑に落ちなさ」である。
今日とあるある期間のデータを元に未来の値を予測しようという課題に取り組んでいた。このような課題は機械学習に皆が期待する分野である。
時間軸があるデータを時系列データという。時系列データを使って未来の数値を予測しようとするとき、方法は色々あるが定番の手法の一つにラグ特徴量というものがある。ラグ特徴量というのは例えばA,B,Cというデータが時系列に以下のように並んでいたとする。

A1|B1|C1
A2|B2|C2
A3|B3|C3
A4|B4|C4
A5|B5|C5
A6|B6|C6

このデータを予測したい値(目的変数)に合わせて単純に並べただけでは

目的変数|A1|B1|C1
目的変数|A2|B2|C2
目的変数|A3|B3|C3
目的変数|A4|B4|C4
目的変数|A5|B5|C5
目的変数|A6|B6|C6

となるだけである。
これを以下のようにずらしながら横に並べる手法である(差分(この場合は1,2)が発生するが切り捨てる)。

目的変数|A3|B3|C3|A2|B2|C2|A1|B1|C1
目的変数|A4|B4|C4|A3|B3|C3|A2|B2|C2
目的変数|A5|B5|C5|A4|B4|C4|A3|B3|C3
目的変数|A6|B6|C6|A5|B5|C5|A4|B4|C4

とすると、それぞれの行の特徴が鮮明になりより学習効率の良いデータが仕上がるというものである。
もちろんこの方法で確かに成果は上がっている。ただ個人的には古典的な統計的手法による解の方が根拠があって好ましい(事実、統計的手法が使える場合はその方が正確であることが多いようである)。
このように根拠が今ひとつ見えず、結果的に成果が上がったというものが散見されるのが機械学習の世界である。

Approaching (Almost) Any Machine Learning Problem 2020/6/30
Abhishek Thakur(著)

Kaggleで全部門でGMでいらっしゃる方のこちらの本の中にDeep Learningでのハイパーパラメーターチューンはアートであるという記載があったように記憶している。そもそもDeep Learningの数学的原理はまだ不明確らしい。そういう世界である。

3.実務において

今会社で機械学習的なプロダクトを何とか活かせないかという話が出ていて勉強会に参加している。早めに取り組んでいたので勉強会でもリードできている感がある。ただ開発会社ではない一般企業なので自社開発の予定は無くベンダーに依頼し実装することになる。このようなやり方でもこれまでの勉強はやはり活きる。理解して話を聞くのとそうで無いのとでは明らかに違うし、持ち上がってきた話が現実的なのかどうなのかの判断もある程度の確度で行える。そういう意味では必要十分に役に立っている。

4.(今のところ)結論

機械学習の勉強を始めてよかった、大変大きなことの一つに数式アレルギーを克服できたことがある。所謂理系の分野の話題や本は基本的に着手できなかったが、今は少し見てみようという気になれる。機械学習用に買ったそれなりに高額なマシンを飾りにしないという一心でかじり付いてきた成果の一つがこれである。全く数学がダメだった僕にとって(今も決して出来るわけではない)は決して小さくはない。

機械学習のことがわかってきて何か出来るような気がしたときには夢が持てた。ただもう手に届かない世界になってきたような気がしている。それが冷めてきた一番の理由のような気がする。
かといって、これまでやってきたのに止めてしまうのは勿体ないし、今のところその気も無い。これからはある程度楽しみつつ、面白そうなコンペがあったら参加して、面白そうな話題があったら調べてみる。それぐらいの気持ちで付き合っていこうかなと思う。

少し気持ちの整理のため、書いてみました。

この記事が気に入ったらサポートをしてみませんか?