2024年の目標とやらないこと
写真は、9月1週間ほ…
近年、機械学習の技術は注目され、今日となっては、本職のデータサイエンティスト以外で、自分のようなアプリケーション開発に従事する人間にとっても見過ごすことのできない分野となっている。そんなところで、友人の紹介で機械学習にまつわるセミナーに行ってきた。行ってきたセミナーは下記のセミナーだ。
今日から始める人工知能 × 機械学習 Meetup – connpass
http://connpass.com/event/33753/
セミナー自体は非常にながく、だいたい半日だった。しかし、データサイエンティストとはどういう人種の人なのか、機械学習とは何かを知る、という目的は十分達成ができた内容であった。
※メモをもとに書き起こしているが、ちょっと内容的に怪しい。感覚的には60%くらいの情報はあってるくらいに思ってもらえると。機械学習に詳しい方が見て、間違っている箇所がある場合は、コメントで教えてください
機械学習とは、たいがいどういうステップで行われているのか、という話が起点で、データサイエンティストがどういうことをしている人なのかがわかってきた。まず機械学習についてだが、機械学習というのは以下の3ステップに分かれる。
機械学習3つのステップ
1のデータの解析をおこなうにはデータの準備が必要で、ある程度正規化されたデータを用意してやる必要がある。ベテランのデータサイエンティストのコメントでは、機械学習技術では、どうしても2の学習の部分に注目がいくようだが、実際は1のデータ解析の時に使うデータの準備、データの質が一番キモということだ。要は、なんでもかんでもデータを準備すれば良いというものではなく、意味あるデータをたくさん用意してあげましょうということだろう。
2では、1のデータの解析結果をもとに学習をおこなう。この学習というのが高度な数式であり、要はこの数式に1のデータを読み込ませて予測をおこなっていくというものだ。
3では、2の数式での予測が間違っていたか・正解かで学習の成果を修正する。よって、1→2→3を1ステップ繰り返すごとに、3のステップに差し掛かるたびに学習の成果がより正しいものに修正されていく、ということだ。機械学習には、教師あり・教師なしというのがあるらしい。これについては、ちょっと分からなかったが、時間のあるときに調べてみようと思う。
機械学習はおおまかにはたったの3ステップだが、さくっと「学習」するだとか、「学習成果を修正する」なんて字面で表すほど簡単なことではない。もちろん、機械学習というのだから、プログラムで自動化は前提だし、あくまでプログラムへの実装段階では「学習」は数式になっている。なので、データサイエンティストという人たちは、機械学習でいうなら、機械学習に適したデータを見つけるプロであり、学習アルゴリズムを見つけるプロであるのだ。それらのアルゴリズムを、時には自らプログラムに実装する人もいる、ということだ(セミナーで聞いていた感じ、GUIで操作できたり、現代ではツールがかなり充実しているようだ)。
実をいうと、データサイエンティストってエンジニアの一種なのかと、僕はセミナーに出る前まで壮絶な勘違いをしていた。実際には前述の通りで、データサイエンティストとは数学にかなり寄った専門知識を有する人たちのことだ。セミナーの後の会食では、現役データサイエンティストたちの会話では「○○さんの話で、あの定理を使いたくなるけど、実はこれはよくある間違いって、すごい参考になった」とか、そこだけ聞くと数学科の人たちの会話にすら僕には思える状況であった。いつも大概HTTPのポート80番の世界で仕事をしていたりするので、インフラ・アプリケーションエンジニアなんてその場は畑違いも良いところで、全くデータサイエンティストの方々の話に着いていけなかった。
ところで、少し自分の仕事を少しお話したら、「ああ、実装よりの仕事なんですねー」とデータサイエンティストの方から一言コメントを頂いて、話が続かなかった。データサイエンティストの彼からすると、アプリケーションエンジニアはあくまでシステムを動かすための、いわゆるドカタみたいな役割に思えるんだろうなーという印象を受け、このコメントが興味深かった。彼らの立場になって考えてみると、データサイエンティストは実装よりも理論のほうが重要だ。機械学習でいうなら、いかに学習の成果において正解率を上げていくというのが最大のミッションなわけで、実装に割く時間よりもアルゴリズムの検討に大きな時間を割くことから、エンジニアに対する実装よりなんですねーというコメントもまったくもって頷ける。そもそも、データサイエンティストにはエンジニアとしてのスキルがない人もいるわけだし。
ただ、このコメントは彼らデータサイエンティストの立場や理論を中心に考え過ぎているという側面もあるので、一応これに反論しておく。僕からすると、彼らデータサイエンティストは理論をもとにストイックに一部の強力なアルゴリズムの生成に全力を尽くすし、それはビジネスの利益を最大化するためには大事なことだと思う。一方で、アプリケーションエンジニアやインフラエンジニアはビジネスのカネを生み出す基盤のシステム全体の構成、技術の衰退、流行を見つめて、必要に応じてシステムが時代を生き抜くように作り替えたりする任務があると思っている。
専門性でいうと、データサイエンティストはよりアカデミックな分野の職種といえ、エンジニアと一概に表現した場合にアカデミックさは比べ物にならない。希少性や専門性でいうと、労働市場的には、アプリケーションエンジニアよりもデータサイエンティストが圧倒的に優位だ。
だが、そもそも解析アルゴリズムを動かすシステムがなければ、彼らは仕事がないと思っている(ハイブリッドにデータサイエンティストかつアプリケーション開発ができれば関係のない話だが)。これが結論なんじゃないかと思う。理論があっても、動くシステムの基盤がなければ理論の意味がないし、システムがあっても良い理論がなければビジネスが活性化しないだろう。要するに、理論派もドカタもどちらも必要であり、どちらが中心でもない。別物なので、理論派は数学のプロである必要があると思うし、ドカタはシステム設計・構築の技術についてのプロである必要がある。
というわけで、データサイエンティストクラスタの人たちはアカデミックかつ、希少性や専門性から基本的に高給なことが多いので、よくいるアプリケーションエンジニアが話しかけると、ちょっとアレなコメントをもらうことがあるかもしれない。正直言ってしまうと、データサイエンティストたちが集まった会食にて、「俺たちデータサイエンティスト集団」的な、ある種のイケイケ集団的な印象を大いに感じてしまった。だが、そういう人たちなんだと先入観を持たずに、彼らデータサイエンティストは、自分にない専門性を持っている希少な人たちだと思ってはいるので、今後も積極的にデータサイエンティストの方に教えを請い、自分もデータサイエンティストの知識も取り入れたいと思った。
なんて言ったって、データサイエンティストはGlassdoorの人気職種1位、給与の中央値も1位の職種らしいからね。僕も超イケイケデータサイエンティストのエッセンスを学び、イケイケ高給取り集団の仲間入りをしたいぜ!
プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。
このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。
learnのスペルが間違ってる?
>> やまもと さん
誤表記のご指摘、ありがとうございます。
「学習(lean)」となっていたところを正しい表記に訂正しました。
実装よりって良い言葉ですね。
エンジニアとしての自分のキャリアを考えるために参考になりました。
>> リーマンエンジニアさん
コメントありがとうございます。
「実装より」はデータサイエンティストから見たプログラマーという立場の人を表すのにとても端的で分かりやすいです…。
今あらためて自分の記事を読み直すと、プログラマーはアカデミックさが低い、みたいな印象が取れました。これは変な誤解を与えてしまいますね。
プログラマーでも、コンピュータサイエンスの教養がバックボーンにあり、コンピュータそのものに深い理解を持つプログラマーは重宝されると思います。
そのようなプログラマーは、専門性は決して低くはないと思います。
プログラマーであっても、その道を極めようと思えばいくらでも上はあるので、プログラマーはデータサイエンティストほど希少でこそないですが、プログラマーでも専門性が低いなどと卑下する必要はないなと思いました。