ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

社内の読書会が終わりました。毎週1時間で全18回でした。5ヶ月弱です。一言で言うと非常に読みやすかったです。今まで何冊か機械学習の入門書を読んでいましたが、理論的なアプローチについて体系立てて、かつ、分かりやすく書かれていたと思います。同じテーマについて複数の手法を適用し、その差についても説明されているので、全体像も把握できるのがよかったです。数式も数学徒の小部屋というコラムで導出過程について説明されており、同僚の助けもあって何とか読める感じでした。以下、メモです。

  • 統計学のための数学入門30講 (科学のことばとしての数学)を読んでいたおかげで数式は読めた。微積線形代数と統計の基本的な知識(正規分布など)は知らないと読んでも面白く無いと思う。
  • 話のわかりやすさを優先して、一部定義が曖昧だったり省略されていると感じる部分はあった。そういう箇所は気にせず読み飛ばして、筆者が全体として言いたいことだけ読み取るで良いと思った。何度か遭遇し、読書会のメンバーで悩んでも結論が出なかったのでw
  • 改めてモデルを理解することは重要だと感じた。仕組みがわかれば向き/不向きも分かるので、とりあえずデータ集めて適当なモデルにぶち込んでとやっても精度出るわけないよなーと再認識した。既にみんなが取り組んでいるタスクでセオリーも存在し、素性と利用するモデルも分かっている場合はいいだろうけど。
  • 読書会として読んでよかった。一人で読むと数式で心が挫けたり、読みやすいのでなんとなく理解した気になって読み飛ばしていたところがかなりありそうな感じだった。
  • 数式はノートに写しながら導出過程を理解するのがいいかと考えていたけれど、同僚から計算結果だけを見て利用するスタンスでもいいのではと言われたのは結構衝撃だった。実際に深層学習 (機械学習プロフェッショナルシリーズ)を少しだけ読んだら計算の流れは似ていて、導出過程が分からなくとも結果となる数式の意味が分かればそれなりに読める感じだった。
  • ソースコードがついているので実際に試せるのもよかった。ただ、ソースはあまり読みやすい感じではない気もした。

ということで、来週からはPython機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)に取り組みます。Pythonでさくっと機械学習スクリプトを書けるようになるといいなと思ってます。

あと、参考までに読書会のメモについて以下に貼っておきます。ノートにとっていた数式のメモは貼るのが大変なので割愛します。あと、記号は意味がわかればいいと割り切りそれっぽくメモしたのでその辺りはご了承下さい。

  • 主な数学記号と基本公式
  • 2.1.4
    • E(RMS)とあるが、数式でEのrmsと書いてるからか
  • 2.1.5
  • 2.2.4
    • M=9でもいいのでは?
      • 精度が変わらないならパラメータは小さい方がよいという基準があるのでは。赤池情報量規準
      • おそらく、M=40とかになると過学習になるのでは
      • M=9でもM=3とほぼおなじ値になってM4以降の係数は小さくなるはず。実際、M=9のグラフがぐにゃぐにゃしていない
  • 3.1.3
    • 最小二乗法は最尤推定法の中でも、正規分布の誤差を仮定した特別な場合に対応するとみなせる
    • 03-maximum_likelihood.py ではWの値はコンソールに出力されないが、02-square_error.pyに記述されている print df_ws.transpose() を追記すれば出力される
  • 3.2.2
  • 3.2.3
    • 一致性はデータ数を大きくすると真の値に近づいていくこと
    • 不偏性は何度も推定を繰り返した際に、推定値の平均が真の母数に近づいていく。不偏性がある場合は、データ数が少ない場合に真の母数からはずれる可能性があるが、大きい方にはずれる場合と小さい方にはずれる場合が均等にある。
  • 3.3.2
    • 標本分散がずれるのは、「NS2n/σ2が自由度N-1のx2分布に従う」という事実に関係する。そもそも、標本分散S2nは正の値しか取らないため、散らばり具合が対称な形にならない
    • 不偏分散はN/(N-1)倍したものなので、データの散らばり具合は対象な形にならない
    • 不偏推定量というのは、あくまでも「多数の推定を繰り返した際の平均値」についての性質であって、1回の観測に基づく推定値の正確性を示すものではない
  • 4.1
  • 4.1.1
    • (4.2)は普段見ている一次関数。f(x,y)=1 とかだと、それは切片(w0)
    • 直線上は不正解としている?
      • そもそも直線上を正解にできない手法。そうしないとその後の計算を透過的に扱えない。
  • 4.1.2
    • Σは判定に失敗したものだけなので、式に補足があってもいい気がする。
  • 4.1.3
  • 4.2.1
    • 4.30 式
      • もっと効率のよい方法はあるのか?
        • xとyのデータの分布に依存する?
        • 正規化すれば問題ない?
      • xとyのオーダーが異なる場合はどうなる?
        • xとyにはバイアス項のようなものはつけられない。xとyは移動する距離が決まっている。一方cは任意なので計算する意味がありそう。
    • w0は増え続けたりしない?
      • tが + / - 両方あるので大丈夫。
    • 局所解に陥ることはある?
      • 収束したかどうかの判定条件に1つもエラーがないことがあるので、大域解に至るといえるのでは。
  • 4.2.3
  • 5.1.1
  • 5.1.3
    • 計算コストで比較するとどうなのか?
    • 現実的にあえてパーセプトロンを使うケースはあるのか?
      • 次元が多くなると逆行列あるし、大変なのでは。
    • 収束速度に差はあるのは?
    • 必ず 1 や 0 になる?そもそもロジスティック関数は距離が離れていれば 0 や 1 になるだろうが、近ければ 0.4 や 0.6 になるのでは?
  • 5.2.3
    • 下回るなら反転すればいいから、実際は学習してるはずw
    • 階段みたいな線になったら、それはデータを増やせば直線になるはず。
    • 最初下回って、途中から上回るみたいなのがあれば、そこで線を引いて反転させれば応用としては使えそう。
  • 5.3
  • 6.1
  • 6.2
    • k近傍法も使える場面あるのでは。
  • 7.1.1
    • なぜこれで上手くいくのかという説明を構築するモデルが必要
  • 7.1.2
    • あくまで1ピクセルごとが独立しいて、それぞれのピクセルが一致する確率を出しているだけ。なので掛け算。
    • 画像として考えるから分かりにくいが、画像同士が一致しているというよりは順序が固定されたトレーニングセットを前提として最尤推定している。なので、画像を横に並べた1つの大きな画像と一致する確率と捉えても問題ない。
  • 7.2.1
  • 7.2.2
    • 7.14 画層生成器毎の確率Pνk(X)にπを掛けているから。
  • 8
  • 8.1.2
    • 図8.4の偽陽性の箱が小さすぎる。
    • ベイズ定理のメリットって?
      • ひっくり返せるのがメリット。(8.10)とか(8.15)
  • 8.1.3
    • (8.25)は確率。正規分布がある前提でのtとなる確率
    • 分散はどうやってでる?
      • 8.1.4ででるのでは?- 8.1.3
    • p221"観測するデータ数Nが十分に大きくなると、事前分布の影響はなくなって、μNはμNbarに一致する。言い換えると、トレーニングセットのデータが十分に得られるなら、事前分布は多少適当に設定しても構わない"
      • 事前分布の分散は適当でも大丈夫。
      • 十分なデータ数はどの程度?サンプルではN=100でも十分な感じ。
  • 8.1.4
    • (8.50)で分かっている前提の分散に収束するというのが書いてあるので、あくまで分散は分かっている前提だった模様。
      • ベイズ推定の雰囲気を理解するのが趣旨なので、分散については分かっている前提で書いてあるのかも。
    • 08-bayes_normal.py
      • あくまでデータ件数が少ないと事前分布に引きづられると言いたいだけで、分散を出せると言いたいわけではない。
      • 実際 33 行目で真の分散を計算式に代入している。
        • mu_N = (beta_true * mu_ML + beta_0 * mu_0 / n) / (beta_true + beta_0 / n)
  • 8.2.1
    • (8.65) は右辺がない場合は最小二乗法とおなじになる。そして右辺がある場合は最小化するために左辺のf(Xn)の中のWも含めて小さくなるという意味。要はαの大きさでWの大きさを調整できるということが言いたい。
  • 8.2.2
    • (8.69)はどうやって出す?
  • 8.2.3
    • 図 8.9
      • オーバーフィッティングはM=9、α-1=10000でも図3.5のM=9のようになっていないという意味。
      • 観測点から離れるほど分散が大きくなっていることが分かる。
    • 図 8.10
      • Wを4つ適当に選出しても、データ数が多くなれば分散が小さくなるので問題ない事がわかる。
      • 8.9 はあくまでも観測データの話。

新世代デジタルマーケティング ネットと全チャネルをつなぐ統合型データ活用のすすめ

昨年末から年明けぐらいまで読んでました。

筆者のブログである業界人間ベムを以前から購読しており、面白そうだなと思って読みました。要約すると以下の様なことが書いてあったという理解です。

  • デジタルとアナログの間を埋めよう
  • 途中で施策を変えられるように運用していこう
  • DSPをブランドコミュニケーションに利用しよう
  • マーケティングダッシュボードを作ろう
  • テレビCMの現状と新しい評価指標について
  • ネットだけでなくリアル行動に関するデータを使ってターゲティングしていこう
  • ブランド横断型の組織を再編しよう
  • これからのマーケターの育成方法

読んだ感想としては、非常にわかりやすくて納得感があると同時に、書いてあることを実践するのは大変だろうなというものです。ざっくり言えば、いままでよりも意味のあるデータを集めてより細かい単位で運用をしましょうと書いてあるように読めました。私自身はマーケティングの仕事をしているわけではないので、実際のマーケティングの現場がどうなっているかは知りません。ですので、本書に書かれていることはある程度は既に現場で実践されていることなのかもしれませんが、従来よりも運用コストが上がるので投資対効果のバランスが難しそうな印象を持ちました。結局、各社が狙っている顧客の財布は同じで、マーケティングをより上手くやった会社がその取り分を増やすということであれば、他社に負けないというのが最適な戦略なんじゃないかなという印象も持ちました。あと、意味のあるデータは取得が難しいものもかなりあった気がするので、この辺はまだまだ先の話なのかなという印象も持ちました。とはいえ、私自身の本業はシステム構築なので、マーケティングの打ち手をよりコストを掛けずに実施できるお手伝いをしていければと思ったりもしました。

2015年振り返り

2015年について振り返ってみたいと思います。ちなみに、去年は2014年振り返り - n3104のブログでした。

ビッグデータチームのリーダーを担当した

2015年の前半は社内のビッグデータチームのリーダーを担当していました。主にやったのがプリセールスと全体のアサイン管理、個別プロジェクトの立ち上げです。案件によっては立ち上げだけでなくリーダーとしてお客様の窓口を担当したりしていました。後はサービスの設計とか作業の標準化の推進とかいろいろやってました。振り返りとしては以下になります。

  • 初めてのお客様と話すことに慣れた気がする(内心冷や汗かかきながらではありますが)
  • ビッグデータという切り口なので似たような案件なこともあり、お客様が困っている点の共通点が分かるようになった
  • AWSやTableauについても多少詳しくなった(DXやRedshift、Tableau Server辺り)
  • 新規の事業を作っていく過程について経験した

半年で10社ぐらい担当したのですが、やはり同じ領域で複数の案件を担当するのは大きいなと思いました。全体として見ると共通する部分と違う部分があり、どの辺りが共通の課題であったり技術要素であるのか分かるので。何よりいろいろなお客様の話を聞けるのが楽しいです。

後はエンジニア側のリーダーとして新規の事業を作っていく過程に立ち会えたのは大きいと思っています。ほんと最初はふわっとした所から徐々に形作っていくものだということがよく分かりました。全体としての方向性は決めつつも、後は臨機応変にやるものなんだなーと(事業によっては最初に事業計画を立てて、それを執行していくみたいな形でできるケースもあるのかもしれませんが)。後は、条件付きOKを出すということも大きな学びです。いろいろと課題が続出して、なので「やれない」と言いたくなるのですが、そうではなくて「こういう条件ならやれる」と回答することが重要なんだと実感しました。この辺りについては一緒にやっていた営業側のリーダーに色々と教えてもらい感謝しています。

データ分析チームを立ち上げた

2015年の後半はデータ分析チームというものを立ち上げました。具体的には4月にAmazon MLがリリースされたことに伴い、Amazon MLを利用した機械学習案件に取り組むようになりました。私自身はリーダーとしてプリセールス、個別案件のお客様との窓口を中心にやっていました。後はマーケティングとしてブログと登壇もやったりしました。とりあえず分かったのはデータ分析系の案件は自分にとって面白いということです。どの案件もその業務ドメインについて色々と知れるのも楽しいですし、仕組みについて検討するのも楽しいです。

新規に事業を立ち上げるという部分については、まだまだ立ち上げ中という感じではありますが、半年ぐらいでまったくゼロから立ち上げたにしてはそこそこ形になってきたかなと思っています。お客様とメンバーと会社に恵まれたなーと思ってます。あと、ブログとか登壇はほんと大きいなと思っていて、積み上げていくとそれだけでマーケティングにもなるし営業資料に使えるなーとw 何より自分自身の勉強にもなりますし、今後も継続していきたいと考えています。

ちなみに、会社ブログで機械学習関係は12本書いてました。機械学習そのものではなくてAmazon MLの機能に関するものが大半ですが(^_^;)

登壇

3回やりました。今後も機械学習関連のネタで登壇していければと考えています。

Hadoop

実務としては触らないで終わりました。勉強会もタイミングが合わず2回しか行けませんでした。会社ブログで振り返ると7本書いてました。

Tezの調査は面白かったです。YARNとかTezのソースを読んだりしつつ、EMRの挙動とかも調査したりしてました。あとはSparkですね。こちらは今後は本格的に使っていくことになるんじゃないかなと思ってます。あと次の機械学習にも関わりますがMahout in Actionの読書会もやったりしてました。

機械学習

半年ぐらいでかなり成長したなと思います。前職の頃から機械学習とか統計学について興味があって入門書を読んだりしていたのですが、実務経験はありませんでした。そのため正直どう進めればいいのか手探りでしたが、いまは案件の進め方は分かるところまで来たと思います。今後は理論面の強化と実務経験で引き出しを増やしていくという両方が必要だと感じていますが、とりあえず「やったことないからやれない」の壁は超えられたかなと思ってます。いやー、ほんと上手く行ってよかった(^_^;)

理論面の強化という点では社内で 統計学のための数学入門30講 (科学のことばとしての数学)の読書会をやっていて、半年かけてやっと25講ぐらいまで来ました。高校数学で挫折した状況だったので、いつも同僚の数学に詳しいメンバーに教えてもらっていて感謝しています。今後も数学の勉強を続けて、いつか数式の登場するようなブログを書きたいなと思っています。

あと機械学習は今まで積み上げてきたソフトウェア開発のスキルとはベクトルが異なるので、久しぶりにゼロから学習していくという経験も新鮮でした。ソフトウェア開発でそれなりにスキルが身についたと思えるようになるのに10年かかったので、機械学習も同じく10年ぐらいはかかるんだろうなーと思い、気長に取り組んでいくつもりです。

まとめ

他にも色々あり、2015年も非常に濃密な1年だったと思います。おかげさまで成長を感じられましたし、今後も学びたいことだらけなので、今年も充実した1年を過ごせればと思っています。

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

初めてのSparkを読み終わったので、次にApache Spark入門も読んでみました。こちらも非常に読みやすかったです。Apache Spark入門は初めてのSparkの後に出版されていることもあり、Sparkのバージョンも1.5となっており、Spark SQLの説明がDataFrame API前提となり、MLlibではmlパッケージについての説明もありました。またSpark Rについての解説もありました。

初めてのSparkと比べてインフラ周りの説明も丁寧に書いてある印象でした。また、基本APIやSpark SQLのようなライブラリの説明についてユースケースを想定して主要なAPIの説明するスタイルでした。一方、初めてのSparkは網羅的に書かれている印象でした。なお、一番大きな違いとして初めてのSparkは Python / Scala / Java の3種類のソースで解説していることに対して、Apache Spark入門はScalaのみでした(公式ドキュメントPython / Scala / Java の3種類が載っています)。

これから読む人にどちらを読んだらいいと聞かれたら、両方読めるなら両方読んだ方がいいと回答すると思います。記述している内容が異なる部分が結構あるので。どうしても片方というなら、基本的にはApache Spark入門をすすめます。Sparkの進化が早いのでなるべく最新バージョンに近い書籍の方がよいと考えるからです(初めてのSparkの原著が出版された2015年1月時点のSparkの最新は1.2でした。そこから3回バージョンアップされてます。。)。ただ、繰り返しますが、両方読めるなら両方読んだ方がいいと思います。

初めてのSpark

初めてのSpark

初めてのSpark

そろそろSparkを使いたくなってきたのでここ2週間ぐらいで一気に読みました。一言で言うと非常に読みやすかったです。一部わからなかった所はありますが、そちらは実際にサンプルコードを見たり動かしたりすれば分かるだろうなという感じでした。

Hadoop 第3版のようにアーキテクチャの詳細に触れているかと思っていたのですが、インフラやアーキテクチャ寄りのことはあまり書いてなくて、Sparkを使ってアプリケーションを構築する人向けの本という印象でした。そもそもページ数も本編で240ページ程度しかなく、更にサンプルのソースコードPythonScalaJavaで3通り書かれていることもあり、実際にはもう少し薄く感じました。とはいえ、記録によると一通り読むのに5時間近くかかってましたが。。w

とりあえずSparkの使い方を押さえるという意味では非常に有用だと思いました。次はApache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)を読んでみるつもりです(読みました)。

なお、元々Hadoop周りを触ったことがない場合はアーキテクチャ周りについてはSparkを実際に使いながら調べていくという方針で気にせず読んだ方がいいのかなとは思いました。私自身は仕事でMapReduce Javaを使ったアプリケーションを書いていた時期がありますし、Sparkの概要については別途学習していてRDDや系統グラフも知っている状態でした。逆にSparkのAPIとかアプリケーションの書き方を知らない状態でした。ですので、本書に詳細が書かれていない範囲についての事前知識があったので読みやすかったというのはあると思います。

ちなみに、「11章 MLlibを使った機械学習」に書いてあることが6割ぐらいは分かるようになっていて、この1年ぐらいで機械学習周りの知識と経験がそれなりに付いたんだなーとちょっと感動してましたw

よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)

よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)

よくわかる心理統計 (やわらかアカデミズム・わかるシリーズ)

Rによるやさしい統計学の中でよく取り上げられていたので副読本として購入してみました。非常に読みやすくて、個人的には買って良かったです。著者が同じで、まず「よくわかる心理統計 」(2004年9月)を書いた上で、「Rによるやさしい統計学」(2008年1月)を書いており、「Rによるやさしい統計学」で説明が省略されている部分についても書いてあるので理解が深まりました。

内容としてはRによるやさしい統計学の7章(第一部)までに対応した内容が書かれています。最初に理系ではない入門者向けに分かりやすい内容を目指したと書かれている通り、見開きで分かりやすくまとまっていました(数式もほぼ出てきません)。統計学の入門書は何冊か読みましたが、その中でも読みやすい印象でした。また、最後に統計をより深く学ぶ上でおすすめの本が紹介されており、1冊ずつどのような観点ですすめるのか具体的なコメントが書かれていてよかったです。

数式が少ない入門書は何冊か読んでいるので、次はもう少し数式が出てくる入門書に取り組んでみるつもりです。

Homomorphic encryption(準同型暗号)

上記のツイートをした通りで、Homomorphic encryption、日本語で「準同型暗号」というものがあるそうで、要は暗号化したままのデータで足し算とか掛け算を行うもののようです。

Machine Learning Classification over Encrypted Dataでは病気の判定を機械学習で行う際に、利用者の個人情報を守る観点で暗号化したままトレーニングと判定の両方を行う方法について書いてあるっぽいです。Hadoop界隈でも2, 3年ぐらい前からセキュリティ周りの機能強化みたいな話があって、あまり関係ない話だなーと思っていたのですが、最近は仕事で個人情報とかセキュリティ対策みたいな話が出てくることがあり、ちょっと気になって調べてみました。将来的には暗号化したままデータを扱うというのも普通のことになるんですかねー。

ちなみに、Machine Learning Classification over Encrypted DataについてはO'ReillyのNewslettersのDataに載ってました。毎週10個ぐらいのトピックが送られてきて、タイトル眺めるだけでも流行り?が分かるような気がして気に入ってます。