2019年を振り返る(機械学習の世界に足を踏み入れた)
年末で、ちょうどアドベントカレンダーの枠があったので今年一年の活動を振り返っていこうと思う。
この記事はコネヒト Advent Calendar 2019 21日目の記事です。
2019年は結構自分の働き方が変わった一年でもあったので、下記2点を中心に書いていく。
- 機械学習の世界に足を踏み入れた
- アウトプット中心の活動ログ
機械学習の世界に足を踏み入れた
組織の大きな変化もあり、今年から業務として機械学習に取り組んでいる。(元々興味はあったのでチャレンジするいい機会に恵まれたというのが正直なところ)
ここでは、機械学習関連のものだけに絞って時系列でどんなことをやっていたのかを振り返ろうと思う。
1〜3月
当時のCTOの @tatsushim がPythonによるはじめての機械学習 という本を執筆しており、そのレビュワーとしてこの本を通じて機械学習を学び始めた。
この本は、機械学習の初学者が理論よりもまず先に実際に手を動かしてみて機械学習とはどのようなものなのかを体感することに重きが置かれている。 実際にこの本の内容を、全て手を動かしながら疑問点を執筆者である @tatsushim に直接質問しながら「データ準備」→「前処理」→「学習」→「予測」の一連の流れを学習出来たのは後にとても役立ったなと今振り返ってみて思う。(執筆者に直接質問出来る環境はとても貴重であった)
この時点ではなんとなく機械学習がどんなものなのかわかったというレベルで、まだ自分でモデルを作ったりということについては正直想像がついていなかった。
4〜9月
新しい期が始まり、インフラ・MLチームが誕生し、実際の業務で機械学習に携わっていくようになった。 主に、この期間にやっていたのは3月からコネヒトにジョインしてくれた @takapy0210と3人で、これまでEC2で運用していてモデル更新もしてこなかった機械学習基盤を定期的なモデル更新が出来るような形にリプレイスするというプロジェクトだった。
ここでベースとなるアーキテクチャをしっかり作っておくことで、下期以降の機械学習基盤の出足を早く出来ると考え整備をした。
ざっくりと書くと、
- 基盤をEC2からSageMakerにリプレイス
- アプリケーションのコンテナ化(Flask APIと前処理のバッチ)
- Glueを使ったデータ準備フェーズの簡素化
- @takapy0210が書いてある記事が詳しい AWS Glueを用いてETL環境を構築したお話(RDS for MySQL → S3)
このフェーズではML Ops的な側面が大きかったので、これまでのインフラエンジニアとしてのキャリアがだいぶ役に立った。 また、実際に機械学習が動いてる基盤をリプレイスしたことでより具体的なイメージが湧いた点は大きかった。
また、チーム力強化を目的に輪読会も始めた。 この輪読会がMLエンジニアとしてのスキルアップにとても役立った。
お題の本: Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
@takapy0210と相談して、毎回範囲を決めてこの本をJupyter Notebookで全て写経し、疑問点や気付きを輪読会で発表しあうという形式をとった。 これが後にとても役立ち、pandas,numpy,scikit-learnの使い方が手に馴染んだのと、様々なアルゴリズムを実際に手を動かしながら体験出来たのが大きかった。(この本はディープラーニング系のアルゴリズムの解説はあまりないのでそこは後々キャッチアップしていこうと思う)
この本を読んでいくにあたりPythonによるはじめての機械学習 で機械学習のアウトラインを最初に掴んでおけたのは大きかった。
他にも、
- ハンズオン形式で実際のデータを元にNLPのタスクをやったり
- SIGNATEの練習問題コンペに参加して結構いいスコアが出たりSIGNATEの練習問題コンペで 57位までスコアを上げた話
と徐々に課題を機械学習を使って解決する手段が自分なりにつかめてきた半年だった。
10〜12月
上期で一通りの機械学習基盤が整ったので、下期はサービスの課題を機械学習の力で解決していこうと攻めの姿勢でプロジェクトを進めている。
自分も、NLPの多クラス分類の課題に今チャレンジしており、うまく進めばどこかで紹介出来ればと思っている。
機械学習プロジェクトを実際に進める上で、下記が大事だなとここ最近思っているので書き留めておく。
- 課題設定
- 他のチームとの期待値調整
- AIと聞くと期待値はすごく上がるわけだが現実的な落とし所をしっかり設定する
- 精度は導入してから改善していけるというのもポイント
- ドメインの理解
- これは特徴量作成や選定にあたり必須になる
- やってみないとわからない部分が多い
- ある程度の精度はオフライン検証で出来るが、実際のユーザの行動は出してみないとわからない部分が大きい。
- ABテストまで気軽にチャレンジ出来る環境や周囲のサポート、そんな環境を作るための期待値調整が大事なんではないかと思っている。
そして、今はこの本を輪読している。自分はNLP関連を強化していきたいというのと、まだあまりキャッチアップ出来ていないディープラーニング関連の話も解説されており、今解いている課題にも近しいということでこの本になった。
そんなわけで機械学習エンジニアとしての第一歩を踏み出したわけであるが、自分としては久々の全く新しいチャレンジでワクワクしていて楽しいというのが正直な感想である。文系の自分にとって難しい数式が理解出来るかというとそうではないんだけど、そんな数%の精度向上を求められる世界の前段くらいまではこのまま突き進んでいけるんではないかと思っている。
インフラ分野に関しては、これまでの勘が働いてどんな課題もある程度なんとかなったりするが、別分野になると全く鼻が効かず悪戦苦闘しているが、そんな悪戦苦闘も久々で楽しかったりする。 一人で、今の状態までなれていたかというとそれは無理な話なので、優秀なチームメンバの @takapy0210 には本当に感謝している。
2020年は、機械学習分野でも成果を出していきたいと思っている。
アウトプット中心の活動ログ
後半は、今年一年の活動を外部へのアウトプット中心に振り返っていこうと思う。
1月
日経SYSTEMSへの寄稿がきっかけで、日経主催のイベントで話す機会をいただいて喋ってきた。
2月
Auroraのカスタムエンドポイントの検証をしていて記事を書いた。 ただ、後に色々と課題があり現在まだサービスには投入出来ていない。
会社のメンバと共著で、下記のPHP本のインフラ部分を執筆した。 雑誌の執筆とは違い本の執筆は本当に大変だった。(自分はページ数少なかったが他のメンバは本当に大変そうで頭が下がる思いだった)
TECHNICAL MASTER はじめてのPHPプロフェッショナル開発 PHP7対応 | 伊藤 翔, 金城 秀樹, 高野 福晃, 永井 勝一郎 |本 | 通販 | Amazon
3月
比較的Fargateを早い段階でサービス投入していたので、JAWS コンテナ支部で喋ってきた。 当時ECS+FargateをFargateと表現するような風潮があったのでそうではないよね的な話をした(今はEKS for Fargateも出てそのような話は聞かなくなったが)
4月
ちょっと変わり種で、imgixという画像サイズを動的に変換したり柔軟な加工が出来るCDNを導入したのでそれについて書いた。
6月
新規サービスのECSへのデプロイをcodebuildで行ったのでそれについてまとめた。 肝となるローカルレイヤキャッシュにホストガチャ的な要素はあるが、この構成は中々良くて新規サービスはだいたいこのフローに則って運用している。
10月
AWS DevDay Tokyo 2019で、CfPが通ったので喋ってきた。 主にAWSを使ったサーバレス中心のバッチアーキテクチャの話をしてきた。 会場が超満席になっておりとてもありがたいなと感じたことを覚えている。
11月
上でも話した機械学習のテストコンペでスコアをかなり上げれた経験について話した。 機械学習関連は初めての登壇だったので、何を話したらいいかわからず資料作りに悪戦苦闘したことを覚えている。
12月
今年ECS関連で取り入れたアップデートについてまとめた。 今年は、機械学習に個人のリソースをだいぶ割いたので小物感が強く来年はもう少しインフラ分野もチャレンジしていきたいと思っている。
ということで駆け足で2019年を振り返った。 今年は機械学習関連のインパクトが強く、久々にエンジニアとしての成長を実感出来た1年だった。 来年は、プロダクトにそれらを還元することを目標にしつつインフラ面でも攻めていこうと思う。