🐬 はじめに
「くじらを食べる方法」という言葉があります。これはものの例えで、スケールの大きな問題や課題をクリアするにはどうすべきか、というもののアイデアとして提唱された言葉です。ただ、こんなことを言い始めると、シーシェパード環境保護団体から大ブーイングがきそうですが😅
人によっては、なにがスケールの大きなものか、なにが難度の高いものかは異なりますが、今回、自身で体験したもので紹介してみます🍙
🤖 機械学習とやらをやってみた
機械学習の概念的知識はある程度あったのですが、それをコードにしたらどうなるのか、ということは知らなかったので、購入してみました🐨
機械学習の本(ドキュメント)については、いくつか典型的分類がある感じがします。それは、
① 機械学習の全般網羅的な概念的な知識
② 数学にもとづいて機械学習の概念をコーディングしたもの
③ より実践的な機械学習パッケージを活用して、現実の個別の問題へのアプローチを解説したもの
という感じでしょうか。本書は、どちらかといえば②に該当しました🐜
読後感を先に申しておくと、これから機械学習の基礎を学んでいろいろ研究したい、という若い方にはとても向いていると思います。しかし、私のような成長性の低いミドル・シニア層が読むには、気の毒かなと思います。🐙
今から大学数学をやりたいか、と言われてそう思えるなら向きかもですが、ミドル・シニアは必要なインプットから結果に直結できる③のタイプか、ジェネラリストとして身につけておくべき①のタイプの書籍の方が、対費用効果としては高いように思いました。当書籍は、基礎的な部分に対して重点的に焦点をあてていました🍭
ページ数は700ページ超あります。普段、読書をしない輩逹にとっては、ちょっとやりづらい。ではどうするか?こうします🍥
やることは簡単です。「これだったらできる」と思えるページ数を目安に、それぞれの章ごとに分解します。ページ数の都合でうまく分解できない場合には、コピーをとって分けます🐦
そして厚いものでも大丈夫なホッチキスで束ね、文具店で売っている製本テープ等(私の場合はガムテープです)できれいに仕上げます。これは、ただのルーチンワークです🐰
そして、どの章がどの章とどのような関係なのか、という「章の構造」を調べます。これは、およそ目次にあるか、冒頭にあるか、第一章にあります。章の構造は、本の内容とはあまり関係がありませんので、これもルーチンワークです。そして、こうしたことができることが良本の証です🐗
それでも、まだそれぞれの章が50ページ超あります。まだ、しんどい。では、どうするか?章の中でもいくつかの部に分かれていますので、それらがどのような関係を持っているのか調べます。これも、およそ各章の導入部分か、各章のなかの第一部で書かれています。そして、部のタイトル部と当該記載箇所を丸番号などでリンクさせておきます。
少し内容が入ってくるので、作業は章を進むごとでも良いと思いますが、この内部構造の把握も内容の理解によらずできるはずなので、これもただのルーチンワークです。以下、同様にして細分化します👘
こうした構造がしっかりしていることを、体系的と言いますが、この本はその意味で非常に「体系的」でした🌟
最終的に、全体のおおまかな構造やそれに対する現在位置を把握できる状態になりました。ページ数にして数ページでしょうか。これなら、なんとか食べられそうです😍
👳 厚いだけではないのだよ
私の通っていた高校は進学校でした。進学校でしたので、受験する学校にあわせて数学3・Cの時間が数学2・Bに替わるという構成でした。教師に言われるままにそのようにしたのですが、受験した大学は情報工学科で数学3・Cのあるところでした🐯
なぜ合格したのかはいまだなぞですが、大学には行ってません。したがって、実のところ学校で教わった数学の知識は2・Bあたりです🐞
先に言及したように、機械学習の本では必ずしも難しい数式が出てくる訳ではないですが、この本については出てくる場合のものでした。ではどうするか?
なんでもそうなのですが、数学の場合は特に、答え(導出)は既にどこかに書いてある、ということがあります。つまり、分からないところに出くわしたとき、以前に遡って当該箇所をリンクしてあげればよいことになります。三段論法の応用バージョンです🐭
具体的には、おなじ値の部分を色鉛筆で囲って、それを紐付けします。そして、その式それぞれを番号を振り、コーディング部分にも同じ番号をふります🐽
なお、注意点があって、一般に行列式の場合には前後を入れ換えられない、という問題がありますが、当該事項も注釈に書いてます。書いているので、そこにビックリリンクマークでもつけて、行列式のあるところに(慣れるまでは)同じようにマークします。また、コーディング部分でも違いが明らかとなるこうした場合には、解説の方にコメントしておきます。
これもほぼ手を動かすだけのルーチンワークですが、このようにすれば、再現可能性の問題は依然としてのこるものの、とりあえず理解できない部分は極端に減ります🍣
それでも分からない部分はブラックボックスにします。入力と結果だけをもってそれが正しいと仮定しておくのです。「女心はよく分からない」から女とは付き合えない、ということもなかなか珍しい事でしょう😋
なお、女心もそうですが、いぜん導出されていないものについても考慮すべき、という特有の文化が日本にはあります。これを『忖度』文化と言います😵
🍖 しかしそれでも疼く根性論
はじめるにあたって、とにかくスモールな環境で行う、ということにこだわっていたので、アンドロイドのパイドロイド3というもので可能な限りやってみました🐲
なぜ、スモールな環境にこだわるのか?―――もし、いくらでもスケールして良いという環境下で、なんでもスイスイ楽しいな、という状態が導かれるなら、いくら機械学習を学んだところで、結局「巨大資本が勝つ」という現代社会の構造には打ち勝てない気持ちになるからです。つまり根性論です🐛
結論としては、17章が計算可能性問題(GPU使用前提)で、18章がOpenAIをインストールできない問題で、それぞれ実行不可能だった以外、ややズルもしましたが終了できました🐟
ズルというのは、一部のデータファイルがtar等のため、パイドロイド以外のところで解凍する必要があった、という程度です。今回は採用しませんでしたが、パイソンモジュールでも、同様なものは探せばあるはずです🐧
実際の実行時間は、スマホの特性なのかオーバーヘッドによるものかは不明ですが、短時間ならスマホの方がノートパソコンより速いこともありました。が、長時間計算が前提の機械学習として、実質的にはミドルスペック(8core/4proc, 8GB)のノートパソコンの1/3から1/2といったところでした🍢
数時間かかるプログラムもいくつかありましたので、現在状態を保持するプログラムを追加し、バッチ学習のものを短時間で中断可能なオンライン学習またはミニバッチ学習に変更しました🍔
また、ランダムフォレストで最適なメソッドや学習パラメーター(ハイパーパラメーター)を学習する、という章では、答えが分かっていれば、あとはただのやっつけ仕事になるので、答えが既知を仮定したものをとりあえずやってしまいました🍌
しかし、それでも変な根性論が働いたので、やっつけ仕事の部分もそれぞれ個別に実行し、ノートに結果を鉛筆で記録して、自分で比較して、答えである最適なパラメータを確認する、ということで解消しました🍏
まあ、既存の機械学習のほとんどは、既知ないし定式なるものの答えへのアプローチですから、インチキなんて言わないで😅
ジュピターノートブックでやれば、スマホでも同じ感じです。なお、パイドロイド3の方ではどのような理由かは分かりませんが、ラボタイプのノートブックは不安定なので使用してません。が、インストールはできるみたいです🍆
最近流行りのカグルとかグーグルコラボも、見た目こそ違っても中身はジュピターのようです。それならということで、JaaS: Jupyter as a Serviceなる概念も登場しているようです。ウェブサービスとして準備すれば、クライアント環境としてはブラウザさえあれば良いので、カスタマー側には環境構築上のメリットがありそうです。
そしてなんでも、ジュピターはPython, R, Matlab, Juliaはおろか、C++, Rust, Go, TypeScriptなども入れることができるみたいです。まあ、そもそもコマンドラインが動かせるので、そういうことなのでしょう。パイドロイドから、ジュピターを介してコマンドラインを動かしてよいものかどうかは、これは不明ですが…
また上記について別の話ですが、Windowsインサイダーでは、スマホリンクなる機能があります。これまでのリンクと違って、ファイルが共有状態になるのではなく画面(操作)が共有状態になります🍠
パソコンのデスクトップ上でスマホのスワイプやタッチ操作ができる、といった感じです。が、UXまで共通ではなくリフレッシュレートは追従できないので、画面操作上からは、ややもたっとした感じがあります。まあ、マウスでスマホ操作はいろいろ問題があるでしょうから、じゅうぶん及第点でしょう🍰
突然ですが、問題です。ここはどこでしょう?
Windowsがリモートコントローラーで、アンドロイドのTermux上のDebianをVNCディスプレイで表示しているところを表示しているところです。当たり前ですが、超不安定です。そして、キーボードはいまのところ、英語モードなのかどういうモードなのか分かりませんので、うまくコントロールできません🍯
そして、機械学習が終了してしばらく後に自動的に3.9.7に更新されたパイドロイド3…インストールしたモジュール群はしょ、しょ、しょうきょされてし…🧟
(今回の画像はモジュールを再インストールして復活させたものです)
🍩 終わりに…
機械学習の体験記とともに、我流の「くじらの食べ方」を紹介してみました⚽️
構造的には、水平分解/垂直分解、機能分解、時間分解、要素分解など、それこそ機械学習の教師なし学習でいうところの「特徴量により適切なサイズにクラスタリングできる」ことになりそうですが、「くじらを喰う」ポイントとしては、「中身や理解を気にせず、まず分解する」ことだと考えています👑
ただ残念なことに、ファイナンスの面では対抗するのではなく「くじらに乗れ」が原則だそうです。機会学習やブロックチェーンが、クジラ(巨大資本)に対抗できることを期待させてくれる日が来るといいですが…なんて(ちゃん、ちゃん)💃
☕~ おしまい ~☕