mikio-kブログ

craft beautiful experiences.

「仕事ではじめる機械学習」を読んで

f:id:mikio-k:20180111214029j:plain

著者のひとりであるところてん (@tokoroten)氏から「仕事ではじめる機械学習」を献本頂いたのでレビューを書いてみようと思う。

仕事ではじめる機械学習

仕事ではじめる機械学習

本の中身の話をする前に私の機械学習に関する知識経験がどの程度か、簡単に説明しておきます。

私は学生時代、開発中のソフトウェアに存在するバグや、Webサイトの中に含まれる使いにくい部分を機械学習技術を使用して予測/特定する研究に従事していました。卒業後はとあるメーカーの研究所にて、機械学習アルゴリズムを使ったロボット制御に取り組んでいました。と書くといかにも凄いことをしていたようですが、実際にはありもののライブラリを使って学習データから辞書を作り、システムに組み込んでいただけ。自分で本や論文、特許などを読んだり、社内で進められていた多くの機械学習関連プロジェクトを間近で見てディスカッションに参加したり、CMUの金出先生や東工大の杉山先生の講義に何度か参加させて頂くなどはしましたが、機械学習アルゴリズムそのものを作ったことは無いし、既存のアルゴリズムのは内容を詳細に説明出来るわけではありません。ただし、「機械学習アルゴリズムを使って何かを作る」と言う点から言うと、それなりに知見があるのではないかと思っています。

いきなり技術技術した話から書き始めてしまったものの、このブログはテクノロジーに関するブログではないし、主要な読者としてエンジニアを想定していません。もちろんエンジニアの人に読むなって言うつもりはないけれど、デザインを仕事にしている人や、デザイン分野に興味がある人をターゲットと考えながら私はこのブログを書いています。そういった文脈の中で、私がこのブログでこの本を取り上げる理由について説明する必要があるかと思います。

今更私が言うことでもないと思うのだけれども、新しいものを生み出すと言う際には、テクノロジーとデザインのそれぞれについて理解していることが重要です。なぜなら、テクノロジについて正しい理解をしていない事が発想にリミットをかけたり、またはその逆で、実現不可能なコンセプトを生み出してしまうことにもなりかねません。

特に、昨今では機械学習などAI関連技術がユーザ体験に少なくない影響を与えています。テクノロジによって新しいデザインが可能になる事もあれば、デザインによって新しいテクノロジーが生まれる事もありテクノロジーとデザインはお互いに歩み寄るとともにお互いに影響を与えあっています。そういった状況においてデザイナが機械学習技術を知るためにも本書が有用だと感じました。

もちろんデザイナからすると、この本の説明は少々難解で理解しにくい部分もあると思います。例えば、デザイナがSVMとロジスティック回帰の違いを理解する必要があるかと言えば悩ましいところです。もちろんSVMが結果が0、1の2-class分類で、ロジスティック回帰の場合は目的が2class分類だったとしても、その結果のたしからしさが確率が得られるなど、細かい面で様々な違いはあるものの、実際にはライブラリを使う事が多くなることでしょうからSVMがどういった仕組みで動いているかを理解する必要も無いのかも知れません。個人的に、そのあたりは読み飛ばしても大きな支障は無いのではないかと思います。だけれども、KPIを設定し、プロトタイピングを通してプロダクトをブラッシュアップして行く立場からすると、アルゴリズムをどう評価し、機械学習をどのようにシステムに組み込み、データをどう集め、効果を検証するかと言う一連の流れは少なくとも概要程度は抑えておくべきでしょう。

 

さて、本書を読んでいて個人的に面白いなと思ったのは冒頭に「機械学習を本当に使うべきなのかを考えなさい」と述べられているところです。実際に機械学習を使っている人や、機械学習に関して学んだことのある人からすれば当たり前のことではあるのだけれど、世の中には機械学習を使わなくても解決出来る事もあるし、機械学習を使ったとしても解決出来ない事があります。

本屋に行けば機械学習やらディープラーニングやらというキーワードがついた本が平積みにされている今日、これらの技術がまるで魔法であるかのように思われがちであるものですが、これらは決してそういうものではないし、多分思ったよりも使いみちの無くて、使いみちがあったとしても実際にはそれなりに手間のかかるものです。それをまず知識として知った上で、解決したい課題に対して機械学習を使う事が最適なのか、もしくは現時点で最適であるとまで言えなかったとしても最適である可能性が高いのかということは、機械学習プロジェクトを始める前に必ず立ち止まって考えなければなりません。

なぜこういう話を書いたかというと、私自身、機械学習技術をどのように使うかについて色々と考えて居た時期があったからです。新卒で就職した会社で私はいわゆる中央研究所の人工知能関連部署に配属になりました。最初の数年こそはアルゴリズムの開発などに携わって居たこともあるのですが、途中からは企画側にまわり機械学習技術を使ってどんなビジネスが出来るか?どんな製品やサービスが作れるか?についてひたすら考えていました。

私の場合だと機械学習技術だったわけですが、機械学習に限らず特定の技術を何に使えば良いかを考える時って大きくわけて2つのアプローチがあるんですよね。ひとつは機械学習技術を何に使う事が出来るだろうか?っていう技術の使いみちから考えるアプローチ。世の中にすでにあるサービスやプロダクトをヒントにする事もあるし、ICCVやCVPR(コンピュータビジョン分野のトップカンファレンス)などに出てくるような論文をヒントにする事もあります。

もうひとつは課題や市場から出発するアプローチ。世の中には◯◯という課題がある。これを機械学習を使って解決できないか?もしくは、夜の中には◯◯という市場がある。機械学習技術を活用してこの市場に参入できないか?という考え方ですね。例えば今後加速するであろう少子高齢化社会を成立させるためには介護を効率化したり、予防医療に力を入れていくわけがあるですが、これらに対して機械学習技術を使ったビジネスが出来ないだろうか?と考えたりするわけです。

どちらの場合でも、出てきたアイディアは下記2点を満たすか考えなければなりません。

  1. その課題は、機械学習で解決するのが最適なのか。他の方法でもっと簡単に解決できないのか?
  2. その課題は、解決する価値がある課題なのか。その課題で困っている人は実在し、解決されることに対して価値を感じるのか。

また、場合によっては下記についても検討を加える必要があるでしょう。

  1. 機械学習の寄与度はどの程度なのか。
  2. どの程度、課題に特化したカスタマイズが必要なのか。
  3. 自社の既存ビジネス、または製品・サービスとの相性はどうか。

これらの基準からアイディアをフィルタリングしていくと、機会学習が生きるケースって実はそこまでないんですよね。おそらく、この本のターゲットは、既に課題が明確で、そこに対して機械学習を適用することを考えていると思うので、実際に考えるべきは1の「その課題は、機械学習で解決するのが最適なのか。他の方法でもっと簡単に解決できないのか?」になるかと思います。 

フィクションではありますが具体的な例をあげて説明しましょう。今ではカメラに顔認識機能がついているのは当たり前になりましたが、ほんの15年ぐらい前までは顔認識機能がカメラについている事って無かったかと思いますが、この機能がカメラに搭載されるにはきっと下記のような経緯があったはずです。

とあるカメラメーカーでは、ユーザがカメラを使う際に、ユーザの満足度を向上させるためには、ユーザがシャッターを押したうち明らかな失敗写真を減らすかが必要だと考えていました。失敗写真の種類には色々あるわけですが、手ブレもありますし、ピンボケ、構図がおかしい、タイミングがずれたなど様々あり、それぞれの要因に対して個別に対策していく必要があるわけです。これらの課題のうちピンボケに関しては、ユーザが正しくフォーカスを設定出来ていない、オートフォーカスのフォーカス先が被写体に正しく合っていないなどの原因があるわけです。ではなんとかしてスルー画(ライブビューの画面)の中から主被写体となりえる顔を検出して、そこにフォーカスを合わせられないか?と考えるのは自然な話ですよね。

さて、この課題をどうやって解決しようかと考えた時に機械学習を使うのは理にかなっているでしょうか?他にはどのような解決方法があるでしょうか?例えばUI上の工夫で、ユーザが簡単に人の顔にピントを合わせられる仕組みを提供すると言うのも解決方法かもしれませんが、ユーザの利便性を考えると顔の自動検出に劣ります。機械学習を使わずに顔を検出する方法、例えばネットワーク越しに画像を何処かに送り、クラウドソーシングのような仕組みでやることも可能かもしれませんが、コストもかかるしタイムラグだって結構ありそうです。

以上のように考えると、機械学習を使う事が妥当だと言うことができます。このように、課題が明確か?その課題を解決することに価値があるか?その課題を解決するためには機械学習を使用する事が本当に最適か?と言うことを考えることは実際のプロジェクトに着手する前に十分に検討すべき項目であることに異論は少ないかと思います。

ここに関しては私自身も色々と思い出があるので面白い話も色々とあるのですが、あまりこの部分について書きすぎると何のレビューなのかわからなくなってしまうので、先に進みましょう。

次の章では、機械学習で出来る事や、各アルゴリズムの説明、アルゴリズムの評価方法、システムへの組み込み方、データの集め方などについて述べられたあと、映画の推薦システム開発や、Kickstarterプロジェクトの分析、マーケティングへの機械学習活用の例が紹介されています。

世の中にあふれる本などをめくればアルゴリズムの説明などに関しては本書より詳しい本はいくらでもありますが、実際のプロジェクトをどのように進めていくか、プロジェクト担当者の思考をトレースしつつ学べるちょうどよいリソースってネット上にも紙の本にもほとんど無いはずです。

私の場合は大学院で機械学習を使った研究をしていた際に、指導教官や先輩から手厚く指導頂いたおかげで、機械学習のプロジェクトはこのように進めれば良いというのを手を動かしながら理解する事ができましたが、これってアルゴリズムの勉強だけしていても身につけることは難しい知識、スキルだと思います。

そう考えるとこの本は機械学習の概要からアルゴリズムの基礎、そして実際のプロジェクトの進め方が一通りまとまっており、タイトルの通りではあるものの仕事で機械学習に取り組もうと考えている人にはお薦めしたい一冊です。

仕事ではじめる機械学習

仕事ではじめる機械学習