Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

「仕事ではじめる機械学習」を読んだので作者に媚を売る

- はじめに -

以下を読んで、筆者ら (@chezou, @tokoroten, @hagino3000) ともTwitterで相互フォローだし、いっちょ媚び売るために感想記事でも書いとくかみたいな記事。

www.oreilly.co.jp

私は「企業で機械学習プロジェクトをいくつか経験している」「書に載っているアルゴリズムや検定も大体わかる」くらいで本書のターゲットからは少し外れているっぽいのだけれど、知ったことではない。


 

- この本どんな人がターゲット? -

「仕事ではじめる機械学習」というタイトルの通り、「俺は来年から新卒社会人!大学で学んだ知識を活かして機械学習エンジニアとして頑張っていくぞ!」みたいな人が読むとすごく為になる本。
あと、ターゲットとしては「バイトで機械学習経験したい学生」とか「突然上司に機械学習やってくれって言われた!」みたいな人とか。

あと、機械学習を使った時に、プロジェクトの回し方が他の開発とは少し変わってくること、インフラ要求、事業への応え方も結構独特(正確に言うとあまり知られていない)という内容が書かれており、「弊社にもR&Dみたいな機械学習開発やってるあるんだけど、アイツらマジ何考えながらやってんの?」という人もターゲットに入りそう。

機械学習や統計を使って仕事している人の理想が描かれているので、読むと機械学習を仕事でやっている人が実際どうプロジェクトを進めているか、彼らの課題は何かが広く見えてくると思います。


 

- 感想とか -

詳細な内容は@razokuloverが丁寧にまとめてくれてるのでそれで十分だと思います。
razokulover.hateblo.jp

以下はもう自分が気になったこと、考えたことをつらつら書いていくだけです。

 

機械学習を使わない方法を考える」

この書籍では「機械学習を使おうとする前に機械学習を使わない方法を考える」という内容が序盤に数回出てきます。

これは、機械学習や統計を業務で使う上で非常に重要で、エンジニアリング面だけでなくインフラ、アプリ、経営…会社の全ての面に関わってくる非常に大事な文言です。
筆者もTwitterでドヤ顔でネタにしているくらい大事な事です。

これは最終的に機械学習やるやらないに関わらず本当に広まって欲しい内容です。
技術の不安定さや実運用の難しさを丁寧に説いており、現場の機械学習野郎が泣き喚いてるみたいな上司の方は是非本書を熟読して下さい。

 
さて少し話変わって実際問題ですが、無理に機械学習を使うプロジェクトは世の中から減るばかりか増える一方です。実際現場には「それ最頻値、中央値で良くね?」といった状況から、下手すれば「それデータ集めて整理すればif文何個か作ればよくね?」という状況まであります。

書籍に書かれている通り、「機械学習はコストになりやすい技術」です。
それでも使いますか?という疑問符を常に持っておかなければいけません。


私は実際にこういった機械学習コスト度外視プロジェクトが進む主な原因は、現場で機械学習を使わない方法を考えてない」のではなく「機械学習を使わない方法がイマイチわからない」という場合が多いのだろうと考えています ("何でも良いから人工知能使って"と言われたみたいな状況は論外にします)。


例えば、想定として画像認識のタスクをやりたいケースを考えます。
Google先生で「画像認識」で検索するとまずDeep Learningの記事が出てきます。

ここから深みにハマっていくと、やれ「Deepじゃないと出来ないんだ」「複雑な機械学習じゃないと精度の高い物は出来ないんだ」となっていくのではと考えています。実際には解きたい課題はもっと簡単なのに。

まあSNSでもDeepDeep機械学習Deepした案件が拡散されやすいですし、IT企業に属していれば誰しも脳裏に焼き付いてる何かがあると思いますし、心理の働きも多く影響してきますが、一度自分の課題を見返すことが大事です。


機械学習エンジニアの仕事には、こういった場合に「機械学習を使わない方法を提示する事」が入ってくると私は感じています。

例えば「まず色情報だけでヒストグラムを取ると簡易な手法でこれだけ精度が出ます」「既存のパッケージやシステムに割り当てるだけで十分です」「画像をクラウドソーシングに投げてまず運用しましょう」「高度な機械学習は次のフェーズにしましょう」「DeepはAWS上に構築した場合GPU費用もかさむので、独自開発せずGoogleが出してる既存APIを使いましょう」といった説得がここにあたります。

この書籍内では後半に「分析結果を上司に説明する方法」のような項があり、そちらに通ずる部分もありあますが、機械学習エンジニアにとって「機械学習を説明できる事」と同等なレベルで「機械学習を使わない方法を提示できる事」が大事な力であると、この書籍で再認識しました。

上記提案できるためには、インフラの負荷計算やコスパの算出、様々なビジネスの知見、観点、データの可視化などが必要になるため、それらを学ぶ機会があれば大事にしたい所です。


これらは、ちょっとフィルターを通して考えれば、機械学習エンジニア以外でも自分の専門のリスキーさを理解し説得できるという事が働く上で大事な技術という事ではあるのですが、"機械学習エンジニアは特に"という点で書籍内で繰り返し言われている事に良さを感じました。

 

インフラ環境

この書籍では主に機械学習を取り巻くインフラ環境として「マイクロサービス」を取り扱っています。
AWSGoogle Cloud Platform(GCP)を利用し、クラウド上のインスタンスやLambdaのようなコンピューティングサービス、RDBSやRedshiftなどのデータベース等を適切に使い分け、細かく機能ごとにサービス配置を分けるアレです。(最近ではよくピタゴラスイッチと呼ばれているソレです)。

経験上、マイクロサービスは機械学習プロジェクトにかなり適した形だと私も感じています

マイクロサービスは「プロジェクト進行具合やスケーリング等までサービスごとに分けて考えられる」というのが大きなメリットですが、最も機械学習に効いてくるのが「最悪切り離してポイできる」だと思います。

「データはナマモノ」と界隈ではよく言われますが、「時期が変われば今まで使っていた分類器がゴミになる」とか「前処理がちょっと変わって全部パー」みたいな事が多々起こり得るのが機械学習プロジェクトです。
マイクロサービスはその特性によくマッチしています。

機械学習におけるインフラ設計の考え方だけでなく、後半実例も含めながら丁寧に書かれているので、機械学習屋だけでなく機械学習プロジェクト周辺に属するインフラ屋さんにもオススメできる本だと思います。

 
強いて言えば、Workflow辺りに少し触れて欲しかったと思います。

マイクロサービスは良いところも多いですが、既存がもう1つのプロジェクトとして完成している場合が多々あります。
機械学習をその中に持ち込む事で、ピタゴラスイッチが総崩れになり復旧が大変だったという話も聞きます。

またこれらは逆も然りで、切り分けすぎて「アプリ側、バックエンド側の仕様が見えてない」がために「機械学習器の精度が上がらない」といった状況もままあります。


この辺TPOである場合が多いんですが、そのために全体を見通してサービスを管理できるフレームワークが最近徐々に使われるようになってきています。

書籍にある通りログの取得も大事ですが、ワークフローフレームワークのようなデータの取得から前処理、機械学習器を含めたフローの構築、検定以外でKPIに則しているかのテストを、1つのフレームの中で定期的に回せる事がじわじわ効いてきたりします。
もちろん両者良し悪しあるので、この書籍を読み終わった後にWorkflowについて調べてみるのも良いかもしれません。

 
つらつら書いてますが、個人的にワークフローフレームワークは嫌いで機械学習プロジェクトでは使いたくないとまで思っているんですが、まあ便利なので書籍内で取り上げてもらって筆者のプロの方々がどう考えているのか知れれば良かったなあ〜みたいな感じなので、主な理由がゲスです。

 

インフラは機械学習の本質か

インフラやアプリ側の知識、ログも取らないと…という書籍の内容には同意が9割、モヤモヤ1割という感じです。
この疑問はこの書籍に限ったことではなく、常に自分の中にあるものです。

機械学習屋の技術力は、それぞれのアルゴリズムの特性を理解しデータから統計的で適切な処理を施せるところにあると思います。
果たして「AWSの各サービスやスケーリングシステムの把握に毎日数時間使う」「アプリ側のswiftのコードを読むために数日勉強する」といった時間をどの程度取るべきなのでしょうか。それらの設定までやり切るべきでしょうか。

AWSの新しいサービスを触る時間でKaggleをやったほうが良いのでは?

 
もちろんですが、別レイヤを把握することの効能も記事の上でゴリ推ししたので、これらはTPOであり当人が選択すべき点であるという事は言わずもがなだと思います。
会社の状況や自身のキャリアプランに合わせて、その辺りも選んでいかないといけないなと思う次第です。


 

美しい強調フィルタリングからFactorization Machineの流れ

強調フィルタリングやFactorization Machineは、今やレコメンドエンジンを作る上で欠かせない技術です。
Factorization Machineはニューラルネット拡張やら行列の高速計算など発展著しく、Deep、Embedding、Rank学習、生成モデル、バンディット辺りくらいホットです。

書籍『仕事ではじめる機械学習』より、「強調フィルタリングの良し悪し」の説明から美しく「Factorization Machineを使おう!」という流れに持っていけている日本語の書籍は、他にないと思います。

筆者FM好き過ぎでは?

 
レコメンドエンジンを作りたいんじゃいという人は読むと良いです。

 

Excel

途中Excelを使うコーナーがあります。
ところてん氏の書くコーナーですが、機械学習を使わないために様々な分析をExcelで行っています。

実際見てて思ったんですが、Excelはとても高機能でポチポチでビジュアライズできる良いソフトウェアだと思います。

ただ、別にPythonやRに親和性があるわけでもなく、文字コードVBAというキワモノと一緒に生きていくことになるため、やはりMicrosoftという感じ。

 
みんなExcelに変わるやつを心の中で求めているのでは…とただただ思いました。

 

実務案件対応

最後の章では、実際に実務やデータセットを例に、どうやって機械学習の手法を選んだり、プロジェクトを進めていけばよいかが経験を元に書かれています。

私の求めていた部分は結構ここにあって、実務で使った機械学習案件って結構外に出にくいのでこういった所で読めるのはとてもありがたいです。

 
基本的に機械学習における「ドメイン情報」と呼ばれる「データに関する知見」というのは、それだけで会社の機密データや顧客の個人情報につながる場合が多く、そういった背景を理解した機械学習エンジニアの集まる勉強会でさえ詳細をボカされる場合が多いです。

精度でさえ詳しい検定結果を示さず「目視したら大体ほとんど正解でしたね〜…」等と適当にボカして言う場合が多いです。
それらをデカい声で公言した事で「あの会社の機械学習器は90%しか精度がない!1割間違えられるサービスに信用はおけない!」みたいな事を言われかねないからです (もちろんその1割をカバーする施策を裏で多くしている筈ですが)。
 
 
直接的な原因がソレという訳ではないですがGoogleが女性とゴリラを誤判定したニュース辺りから、かなりシビアになってきていると肌でも感じます。
書籍内にも「精度が100%の機械学習器は作れない」という話がありますが、本当にその通りで機械学習プロジェクトというのは機械学習単体では成り立たないのです。ただ、周辺のそれらを含めて1つ話をするというのは、とても骨が折れる事だと思います。プロジェクトの全体像を1から話す事になりかねませんからね。


そういった背景からか、結構実務の詳細な話があるというのはとてもレアなのです。
このような実務寄りの内容が外に出てくる事案が1つ増えたという事でとても価値があると思います。


 

- おわりに -

この記事には書いてませんが、実際は機械学習の主な手法をいくつか解説、実装パッケージの紹介、検定の手法の紹介など、基本的な内容もしっかり丁寧に書かれています。
Pythonの知見も溜まります。

また、コラムのようにちょいちょい出てくる機械学習界隈では当たり前になっているネタも拾えるので良さあります。

実際に私自身は序盤に書いたターゲット層から外れていると思うので「凄い本が来た!」とまではいきませんでしたが、「自分もしかしたらターゲットにフィットするかもな」と思えれば、値段もお手頃ですのでPDFで持っておく価値は十二分にある良い書籍だと思いました。


み〜んなMediumじゃん。はてなの時代は終わったのか?


 
追記:


めっちゃTogetterにまとめられてるオジサンだと思ってました。すまんせん…

 
追記2:
Workflowについて言及してくれてた


個人的にワークフローシステムに導入によって機械学習エンジニアの仕事量が明らかに増えると思っているのであまり好きになれない部分があったが、これもまたTPOなのだなと思う。
適切に見極められるようになりたい。