POSTD PRODUCED BY NIJIBOX

POSTD PRODUCED BY NIJIBOX

ニジボックスが運営する
エンジニアに向けた
キュレーションメディア

twitter

本記事は、原著者の許諾のもとに翻訳・掲載しております。

この記事は、去年私が書いた「Machine Learning in a Week(機械学習に挑んだ一週間)」という記事の続編です。その記事では、私が5日間集中的に機械学習を学び、のめり込んでいった経緯について説明しています。

d1
機械学習に挑んだ一週間
一般の人にとって機械学習の分野に足を踏み入れるのは、無謀なことに思えるでしょう。medium.com

私は順調なスタートを切った後も、時間を見つけて勉強を続け、およそ一年後には、仕事で機械学習を活用した初プロジェクトを立ち上げることができました。そのプロジェクトでは、さまざまなタイプの機械学習や自然言語処理(NLP)の技術を駆使して、 Xeneta潜在顧客の特定 を行っています。

趣味でやっていたことが仕事になって、とても嬉しかったです。

同時に、仕事として機械学習を利用するのは博士号を持つ限られた人だけだ、という思い込みも払拭されました。

実際のところ、数学の専門知識がなくても機械学習の分野に足を踏み入れることはできる。また、博士号がない人でも仕事として機械学習を活用することが可能である。

この記事では、私がこれまで取り組んできた内容について紹介します。同じようなことをしようと考えている方々の励みになれば幸いです。

第一段階:Hacker NewsとUdacity

私が機械学習に興味を持つようになったのは2014年のことです。きっかけは Hacker News の機械学習に関する記事でした。記事を読むにつれ、機械にデータを読み込ませて学習させるというアイデアに純粋に魅力を感じるようになったのです。当時の私はまだプロの開発者として仕事をしていたわけではなく、趣味の範囲でコーディングをし、小さなプロジェクトをいくつか進めた経験がある程度でした。

そこで、まずUdacityのSupervised Learningコースで、最初の数回分のチャプターを視聴し、機械学習に関する記事を読みあさりました。

結果的に概念的なものは少し理解できたものの、実践的なスキルは身につきませんでした。私はめったにMOOC(大規模オープン・オンライン・コース)で成果を挙げたことがなく、このコースも最後まで受講しませんでした。

Courseraの機械学習コースで脱落

2015年の1月、私は 開発者になる ために、ロンドンで開催された Founders and Coders (FAC)のブートキャンプに参加しました。数週間経つと、実際に機械学習のアルゴリズムをコーディングする方法を学びたいという気持ちが芽生えたため、何人かの仲間と一緒に勉強会を始めました。毎週火曜日の夜は、彼らと CourseraのMachine Learning コースの講義ビデオを視聴しました。

このコースは実に素晴らしく、学ぶことがたくさんありました。ただ初心者にはレベルが高すぎたのです。概念を把握するために、何度も講義を見直さなくてはなりませんでした。またOctaveの知識がない私は、Octaveのコーディングでも苦労しました。こうして壁にぶつかった結果、数週間のうちに一人、そしてまた一人と勉強会に来なくなりました。そして最終的には、私も脱落してしまったのです。

今さらではありますが、一からアルゴリズムをコーディングするコースを選んだのが失敗でした。機械学習用のライブラリを使うコースか、せめてなじみのあるプログラミング言語を使うコースから始めれば良かったと後悔しています。

新しい言語を習得しつつ、機械学習のアルゴリズムのコーディングに挑むのは、初心者にはハードルが高すぎる。

もし、あの当時に戻れたら、より簡単でPythonやscikit-learnを使用できるUdacityの
Intro to Machine Learningコースを受講するでしょう。そうすれば、すぐに基礎を固めることができ、自信がつき、もっと楽しめたはずです。

d2
UdacityのMachine Learningコースの紹介
質問やデータセットを使い始める方法や、機械学習を利用して洞察を得る方法を学びます。www.udacity.com

教訓: 難しく論理的なことより、簡単で実践的なことから始めるべき。

機械学習に挑んだ一週間

FAC の最後に、私は機械学習週間という思い切った計画を遂行しました。その目標は、週末までに実際の問題に機械学習を適用できるようになることです。結果的に、なんとかこの目標を達成することができました。

その週に私が行った作業は次のとおりです。

  • scikit-learn について理解
  • 実在するデータセット に機械学習を適用
  • 線形回帰アルゴリズム を一からコーディング(Pythonを使用)
  • NLP をほんの少し学習

こうして、それまでとは比べ物にならない勢いで習熟度が上がりました。全容を詳しく知りたい方は、こちらの 記事をご覧ください

教訓: 一週間という限られた期間で新たな分野を集中的に学ぶのは、非常に効果的である。

ニューラルネットワークで挫折

ロンドンでの FAC を終え、ノルウェーに戻ると、私は機械学習週間で成果を挙げた勢いで、ニューラルネットワークも習得しようと試みました。

しかし、その試みは失敗に終わりました。

理由は単純で、誘惑に負けて、毎日10時間コーディングや勉強をすることができなかったのです。FACで周りにいた仲間の存在の大きさを実感しました。

教訓:新しいことを短期間で習得したい場合は、仲間のいる環境に身を置くべき。

それでもニューラルネットワークの勉強は始めていたので、次第にその概念が分かるようになってきました。そして7月には、なんとか初めてネットワークをコーディングすることができしました。今まで書いた中でも 最もお粗末な実装 なので、見せるのも恥ずかしいのですが、 バックプロパゲーション勾配降下法 などの概念を理解したという証明にはなるでしょう。


去年の後半は、新しい仕事を始めたため学習ペースは落ちました。この時期の主な成果は、 非ベクトル化 から ベクトル化された ニューラルネットワークの実装にステップアップしたことです。また、大学で学んだ線形代数学の復習もしました。

昨年末には、学習内容をまとめた以下の記事を書いています。

d3
ニューラルネットワークのコーディング方法を学ぶ
短期間で新しいスキルを習得する取り組みについて紹介した2つ目の記事です。medium.com

Kaggleコンテストに参加

2015年のクリスマス休暇中、モチベーションが再び上がった私はKaggleに参加しようと決意しました。そこで、 Homesite Quote ConversionOtto Group Product ClassificationBike Sharing Demand などのコンテストに向けて、かなりの時間を割いて、さまざまなアルゴリズムを試しました。


Kaggleでは楽しみながらデータセットを試し、パフォーマンスに関するフィードバックを得ることができます。

この時期の主な成果は、さまざまなアルゴリズムやデータを試し、反復的に結果を改善するという経験を積めたことです。

さらに、機械学習に取り組むことで 自分の考え方に自信が持てる ようになりました。

パラメータを微調整したり、新機能を設計したりすることが論理的に良案だと考えられる場合、それを実行すると大概は効果が得られるのです。

職場で日々学習できる環境をつくる

2016年の1月に仕事が始まってからも、私はクリスマス休暇中の良い流れを保ちたいと考えていました。そこで上司に、就業時間中の勉強を認めてもらえるか確認すると、快諾してもらえたのです。

d4
職場で日々学習できる環境をつくる
働きながらスキルアップするための4つのポイント
medium.com

この時点では、すでにニューラルネットワークの基本を習得していたので、さらに専門的な内容を学びたいと思っていました。

Udacityで知識を深める

まずはUdacityのDeep Learningコースを受講したのですが、こちらは期待外れでした。講義ビデオの内容は良いのですが、私には短くて簡単すぎたのです。

また、IPython Notebookの課題はかなりストレスがたまる内容でした。大半の時間をコードのデバッグに費やすことになり、モチベーションはみるみると低下しました。その結果、職場で数セッションだけ受講した後、断念してしまったのです。

誤解のないように言っておきますが、私はIPython Notebookに関しては知ったかぶりをする初心者です。ですから人によっては、私が思うほどUdaciityのコースは悪いものではないでしょう。また、単に私がこのコースを受ける準備ができていなかったという要因もあるのかもしれません。

スタンフォードでNLPを深く学ぶ

その後、幸いにも スタンフォード大学のCS224D という講義を見つけたので、試してみることにしました。こちらは、内容は難しいものの、課題をこなしながらデバッグ作業に追われることはありません。

さらに解答のコードを提示してもらえるため、行き詰ったときに参照できます。そのようにして作業を振り返ることで、正解に到達するために必要なステップを把握できるのです。

今も受講中ですが、すでにNLPやニューラルネットワークの知識がかなり増えました。

ただ、難しすぎるという難点があります。とにかく内容が高度なので、自分よりも知識のある人の助けが必要だと感じました。そこで時給40米ドルで快く指導してくれるという博士過程の学生に連絡を取り、課題や全体的な知識の習得をフォローしてもらうことにしました。彼は私の知識が足りない部分をたくさん見つけてくれ、私が成長を遂げる上で不可欠な存在になっています。

教訓: 時給50米ドル前後で機械学習の優秀な先生が見つかる。金銭的に余裕があるならば、絶対に試してみる価値はある。

さらに私が働く Xeneta では、最近データ・サイエンティストを採用しました。彼は数学の修士号を持っているので、線形代数や微積分の処理で行き詰ることがあると、よく質問しに行っています。皆さんも職場に頼れる人がいないか探してみると良いでしょう。

Xenetaの売り上げを伸ばす

上述の過程を経て、ついに仕事として機械学習のプロジェクトを立ち上げる準備ができました。プロジェクトの基本的な内容は、会社概要を読み込むことによって潜在顧客を特定する機械学習のアルゴリズムを作成することです。完成したツールを実際に営業部員に使用してもらった結果、大幅な時間短縮につながることが実証されました。

詳しくは以下の私の記事をご覧いただくか、直接Githubで コード をご確認ください。

d5
機械学習を利用して売り上げを伸ばす
自然言語処理によって潜在顧客を特定する方法
medium.com

この段階に到達するまでは、実に長い道のりでした。一方で、早かったとも言えるでしょう。一週間の機械学習のプロジェクトを始めた時は、まさか一年以内に仕事に活用できるようになるとは思ってもいませんでした。

でも、それが100%可能だということが証明できました。私ができたのですから、皆さんにもできるはずです。