更新履歴
1/13:「学習したものまとめ」を末尾に移動しました。
1/9 : 学習したもの一覧を冒頭にまとめました.初版には載せそびれた学習履歴として”Python でわかる オブジェクト指向 とはなにか?【Python オブジェクト指向 の「なぜ?」を「徹底的に」解説】”を新たに書き加えました(申し訳ありません).また,読点が多いという指摘をいただき読みやすく直しました.
1/8 : 学習したDeep Learning講座の細かいコース名とその学習日程を追記しました。タイプミスを直しました。期間に「年」を付け加えました。
1/6 : 細かい言い回しをわかりやすく直しました。
はじめに
この記事はある20代の若者が(ほぼ)未経験から国内メーカの機械学習系エンジニアになり,深層生成モデル・クラスタリングを業務として扱うようになるまでの経歴をまとめたものです.学生時代の経験や就職に至るまでの経緯と自己研鑽の内容を書いていきます.プログラミングスクールに通ったとかの記事ではなく,あくまで独学したことをまとめています.
想定する読者層は
- いま学生で機械学習などは無縁の方
- いま若手の社会人で,機械学習・データサイエンス系エンジニア職種にキャリアチェンジしたい方
- 記事を読んで内容を批評してくれる方
です.
これから丁寧に書いていくつもりですが自分は学生時代は実験と物理をメインに行っていて機械学習などは無縁でした.そういう人がどうやってスキルを高めていったかを参考にしていただければと思います.また,経験が豊かな方にも読んでいただきそのうえで批評していただくのも歓迎です.(そもそも多数の方に読んでもらえるかはわからない)
経歴
私の経歴・スペックを書いていきます.
経歴 | |
---|---|
学歴 | 理系院卒(修士) |
専攻 | 応用物理,および実験 |
好きな科目 | 統計物理,数理物理, 量子力学 |
苦手な科目 | 化学全般 |
学生時代プログラミング経験 | MATLABで実験結果解析, Cでモンテカルロシミュレーションをしたことがある(授業) |
現職 | 国内大手メーカ(従業員1万人ぐらい) |
以上が学生時代の私のメインスペックです.
学部時代にCを授業で習いましたがこれなかなか酷い内容(教科書・講義・テストともに)で,プログラミングが一気に嫌いになってます.いい点も取れずこういうプログラミングを駆使する研究は将来の候補にありませんでした.
卒業研究・修士論文研究では物性系の実験をメインで行っており,その解析にMATLABを使ってました.友人は実験装置の自動化などもMATLABで行っていましたが私はそこまでレベルが高くなく苦手意識を抱いていました.
実はこの修士課程中には博士課程に進学したいという思いが強くあったため主に海外大学院を対象に応募してました.
かろうじて1校から合格をいただけましたがお金事情と気持ちの変化もあり,進学をあきらめています.受験に専念していたため就職活動をしておらず大学院の修了後から就職活動を始めて2019年度より現職で働いております.正直なところ,学生時代とその後につらい期間を過ごしましたがこの1年間のブランク期間にチャレンジしたことが今の仕事に活きているため,その経緯を書いていこうと思いました.
学生時代の機械学習の経験
さきほどまで機械学習の経験は学生時代にほぼないと書きました.ほんの少しだけあるためそれを書きます.
きっかけは忘れましたがなんとなくPythonがブームになっていると聞いていたため独学を開始しました.といっても大してやってはなくUdemyで教えられるままに写経していた程度です.
-
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル(https://www.udemy.com/course/python-beginner/)
Splunkのエンジニアである酒井さんの講座を購入しひたすら写経してPythonの書き方を練習してました.しかし2カ月ほどやって飽きてしばらく何もしてない時期もあります.このころは全部は学習しておらず30%程度学習しました.
大学の寄付講座
また別の期間には大学が初心者向けAI講座を開催したため,そこに応募して参加することになりました.
機械学習に精通している学生が講師となって初心者に講義する方針で,
- Pythonの基本文法
- 深層学習(keras, tensorflowの基本実装)でMNISTの分類
の2つを習いました.これらは数日数時間ずつだったため初心者の自分にとってはかなりボリュームが多く「ディープラーニングって初めて知った!」という程度でした.
この講座では実装練習も多くありましたが,自分は答えを写経しても全然理解した気になれずとにかく難しかった印象です.ここがtensorflow・kerasなどに初めて触れた瞬間でした.
特に大学院では実験がかなり忙しくプライベートも犠牲にしていたぐらいなので,機械学習・データサイエンスの勉強は他にしたことがなかったです.
修士課程修了後
2019年3~6月
修士修了直前までは海外大学院の応募,電話インタビュー,論文のための実験に明け暮れていたため就職活動はしていません.しかしその努力もむなしく海外大学院の合格状況も芳しくなかったため最悪を想定して就職活動を始めました.本期間に就職活動と並行して海外大学院への訪問も行っておりましたが,6月初頭には就職へ完全に切り替えました.合格した1校には,インタビューしてくれた先生に申し訳なさを抱きながら断念する旨を伝えました.
就職面接では「機械学習スキルを駆使して,ドメイン知識をも活かしてデータ分析をできるようになる」と大見えを切っていたため本期間から本格的にデータサイエンスの勉強を始めます.
まず着手したのがPythonの基礎スキル習得および深層学習の体系的な理解です.
-
ディープラーニング専門講座 (https://www.coursera.org/specializations/deep-learning)
このころには「機械学習といえば深層学習やろ」と思っていたのでCourseraのAndrew Ngさんの講座を受講し始めます.Pythonで実装するテストがある,というのもポイントでした.
講義を受講してからコードの穴抜け部分を埋めていく形態だったため深層学習がどう動いてるのかを確認できましたし,説明がとても丁寧でわかりやすかったです.
本講座はかなりボリュームがありましたが,このころは暇だったため1日6~8時間は勉強に費やして1講座(小講座)を1週間以内に終わらせていきました.また詳述したいと思いますが本講座は5つ程度の小講座で構成されており,その小講座が4 weeksにわたる講座群で構成されています.
最後の小講座が時系列データ系の内容で,RNN,GRU,LSTMなどを学んでいくのですが自分が力尽きてしまい,この単元だけ終えられませんでした(この前の自動運転,YOLOの章があまりに重すぎた).
また深層学習とは別にしてPythonのスキルアップのために新たに受講したのがこれです.
-
現役シリコンバレーエンジニアが教える未経験者のためのPythonドローンプログラミング(https://www.udemy.com/course/python-drone/)
先ほども登場した酒井さんの新しい講座です.内容はPythonでドローンを動かすというものでした.
これがとても面白く,Pythonの実践的な使い方がわかり始めました.ドローンを16000円ぐらいで購入して実際に動かしました.
このころになってようやくTCP/IP・UDPといった通信規格(?)の概念を初めて知りました.
先に挙げた講座でも学んではいましたが,本講座で改めてPythonのクラスの作り方やフォルダ構成なども知り勉強になりました.初心者こそこういった講座で実践に取り組むのはとても重要だ思います.
その他にはなんとなく趣味としてカルマンフィルタの勉強をしてみたいと思いUdemyで発見.
-
Autonomous Robots: Kalman Filter(https://www.udemy.com/course/autonomous-robots-kalman-filter/)
これでカルマンフィルタが何なのか学んでいました.これも講師が作成したアプリの原型が配布されて穴埋め形式で実装していく課題があり,実践的なプログラム構築に触れる機会となりました.カルマンフィルタは理解するうえで行列演算が非常に重要であり,背景理論をどのように実装コードに落とし込むかを学ぶことができたと思います.
以上がこの期間に主に学習していた内容となります.
他にも学んでいたものがありますがそれらを含めてまとめると以下のようになります.
講座 | 配布元 | 講師 | 終了までの学習率 |
---|---|---|---|
Neural Network and Deep Learning (ディープラーニング専門講座) | Coursera | Andrew Ng | 100% |
Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization (ディープラーニング専門講座) | Coursera | Andrew Ng | 100% |
Structuring Machine Learning Projects (ディープラーニング専門講座) | Coursera | Andrew Ng | 50% |
現役シリコンバレーエンジニアが教える未経験者のためのPythonドローンプログラミング | Udemy | 酒井潤 | 70% |
Autonomous Robots: Kalman Filter | Udemy | Daniel Stang | 100% |
【Kaggleで学ぼう】Python と Keras で学ぶディープラーニング開発入門 | Udemy | 井上博樹 | 100% |
2019年7~12月
大学院を修了し就職活動も終えた身ですがあまりに暇になったため,インターンをすることに決めました.
大学のころのつてがあり,ある大学でリサーチアシスタントとして雇っていただけることになったためフルタイムで働き始めました.
結果として12月まで働くことになることが途中で分かり,そのあとも何かやりたいと思っていた矢先にとあるベンチャーのAIリサーチャポジションの募集がありました.これに応募して面接を受けましたが自分の知識の浅さが露呈して落選してます.気を取り直して当時の仕事に励みました.
(ここで自分の学習の甘さを痛感することになった)
この半年に及ぶ期間は平日がほぼ仕事で埋まり土日は適当に遊び,という感じで機械学習などは無縁に生きています.仕事内容は物理とシミュレーションがメインでした.シミュレーションをする過程で並列計算を初めて経験したため計算機のごく初歩的な知識を得る機会にはなりましたが,現職にはとくに役立っていません.しかし計算機を使う過程でファイルの送受信にLinuxコマンドを使い,計算機の実行にバッチスクリプトを書いていたことはまだ覚えています.
講座 | 配布元 | 講師 | 終了までの学習率 |
---|---|---|---|
Structuring Machine Learning Projects (ディープラーニング専門講座) | Coursera | Andrew Ng | 100% |
Convolutional Neural Networks (ディープラーニング専門講座) | Coursera | Andrew Ng | 100% |
Sequence Models (ディープラーニング専門講座) | Coursera | Andrew Ng | 途中断念 |
【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門 | Udemy | Tetsuya T | 100% |
Git:はじめてのGitとGitHub | Udemy | 山浦清透 | 100% |
2019年12月~2020年3月
東大の寄付講座
リサーチアシスタントの契約期間を12月末で終えることになりまた暇な時間が出来ました.
このころから東大の松尾研が大学寄付講座【GCI2019冬期】を開催することになり受講生の応募を開始したためこれに申し込みました.事前テストの提出と抽選の結果,受講できることになったため12月末から参加しました.この講座は大変すばらしく,深層学習ではない機械学習手法をしっかり学ぶ良い機会となりました.
とくにKaggle形式の非公開コンペが3回あり,Kaggleをやってみたいと思う自分にとって最高の講座でした.
この講座を通じてテーブルデータの前処理,機械学習手法の選定,スコア付けなど一貫した手法を全くの初歩から学ぶことが出来たのは幸運だったと思います.メンターを務めてくださった東大の学生の方にはとても感謝しています.
DataCamp
同時期にDataCamp(https://learn.datacamp.com/) で勉強を開始しました.
DataCampはデータサイエンスに特化したプログラミング技法が学べるプラットフォームであり,Python, R, SQLをメインにそのほかにはExcel, Git, Bashについても学べます.
1講座の中には講義・実装問題が組まれており約4時間で1つを終えられます(講座によって個人差がかなりあり).
私は主にPythonの講座を受講し始め,"Data Scientist track"とよばれる講座群を完了させることを目標にしました(全26講座ほど).
全講座にアクセスするには有料版が必要で私は有料版を使用しました.
DataCampがこれまた素晴らしく,どんどん実装訓練が行えて着実にスキルが上がっていることを実感しました.
先の東大寄付講座も並列して行っていたため相乗効果があったように思います.
3月末までに毎日取り組み3カ月で30講座ほどを終えました.取り組んだ問題数は1600問ほどあったかと思います.
その後も継続して現在までに41講座を修了し,合計で2310問を終えました.
内容については要望があれば別記事にまとめますが,たとえばpandasだけでも4講座全て取り組み講義→練習をたくさん繰り返して身に着けていきました.ランダムフォレスト,勾配ブースティング,...など各手法についてしっかり講座が用意されています.
2020年4月~9月
現職に入社し新卒研修を受けました.
内容については触れませんがITスキルを伸ばすものはほぼなかったためこの間も独学で勉強しました.
配属後を見据えて深層学習のコーディングをより強化したいと思ったためTensorFlowの専門講座を受講することにしました.
-
DeepLearning.AI テンソルフロー開発者 プロフェッショナル認定
こちらは受講中に講座名が改訂されました.Google Brainにお勤めのLaurence MoroneyさんがTensorFlow・kerasの初歩から中級程度まで教えてくださいます.2カ月ほどかけて全講座を終えました.時系列データは相変わらず不慣れです.
2020年10月~現在
配属が終わり機械学習系エンジニアとして働いています.
(余談ですが自分自身をあまり機械学習エンジニアなどと形容できるほど成熟してるとは思えません.あくまでそれ「系」として働いているつもりです)
やっていることは画像のクラスタリングが主で深層生成モデルに取り組み始めました.
社内でもかつての努力が一応認められており,ポテンシャルがあるとみられたようです.
課題はとてもやりがいがあり部署間ヒアリングを実施しながら機能の実装と結果の可視化も行っています.アノテーションもします.
この期間に新たに着手し始めたのがこれです.
日本語字幕などもなく教材が完全に英語なので時間がかかってます.内容は素晴らしく,頻度主義VSベイジアンの観点の違いから説明が始まり,ベイズ統計にかかわる機械学習で有名なものはすべて扱われています.数式展開および使用場面について体系的に学ぶことが出来る反面,分量がものすごく多いです.これまでベイズ機械学習は計算量の観点から長らく注目されてきませんでしたが,今後はこれが注目技術としてくるんじゃないかと個人的に思ってます.
未経験者が機械学習系エンジニアになれるのか
大学院までに機械学習・データサイエンスを専攻したことが無い自分はその業界の未経験者です.
それが今は,仕事で機械学習・データサイエンスを毎日取り組んでいます.これまで金額ベースでの貢献は果たしていませんが,一応仕事として認められている状態です.
結果としてみれば未経験者が機械学習を扱うエンジニアになっているのですが,こうなったポイントはいくつか挙げられます.
- 大学院までに数学・物理が好きだった.
- 大学院までに,機械学習のほんの初歩を触れて意識するようになった
- 就職までに1年間のブランクがあった
- 英語で学習する能力があった
- 運に恵まれた
この5点が核となっています.
この仕事の魅力としてのブームは、もうすぐはじけるんじゃないかともいわれておりますが確かに過度な期待と羨望があるように思います。
たとえば、機械学習アルゴリズムを理解する上では,数学は避けては通れません.数式展開が無理,という方には難しいです.
また,私の場合は1年間のブランク期間に集中して勉強できたことは結果として効いています.仕事しながらではできない勉強量を短期間にこなすことができました。
そして大切なのが,英語です.英語で講義がある程度きけて,英文の説明を読めるということがスキルアップには効きます.
特にアメリカなどではMOOCが充実しており,生涯学習する意気が日本より盛んだと言われます.日本ではこれと同質の学習プラットフォームを低価格で得ることが難しいと思われます.英語で学習できると,非常に良い学習教材に恵まれます.
最後に,運が良かったことが挙げられます.入社先,現在取り組んでいる課題,周りの人々に恵まれてきました.
このような経緯があり、現職で働いています。誰しもが最初は未経験でありますから、十分な勉強をすれば誰でもなれるものかもしれませんが、あまりに充電期間が伸びすぎると次々忘れてしまうため、一時的な爆発力がいるというのが自分の結論です.
弊社でも,本当の未経験人材に対しては新たな入社に渋い態度をとっており,新卒といえど厳しい現実があります.
機械学習系エンジニアになるためには,入社までにやはりポテンシャルを感じさせる経験が必要だと強く感じる次第です.
社内でこの分野を新しく勉強される方は非常に多いですが,普段の仕事が忙しくて集中的に学ぶことが難しいようです.そうなるといつまでも機械学習・データサイエンスの仕事にメインで携わるのは難しくなると思うほうがよさそうです。
もし,私と近い道を探している方がいらっしゃいましたら,これまでに挙げた学習経験を参考にしていただければ幸いです.
おわりに
機械学習系エンジニアとして働いた感想は色々ありすぎるのですが,大まかに挙げると
- 上には上がありすぎる
- 実装力の不足を感じる(とくに論文からアイデアを取り入れるとき)
- 日々,勉強することが山積み
という現状です.みんな似たような感想ですが,つまり勉強することが大いにありますし,休日もそっちに気が向いています.
また,給料もそこまで高くはないです.
(今後給料をあげていくための努力を継続していきたいと思います)
これが現状ですが,良いこともあります.
- 在宅勤務でそこまで困らない
- 仕事が勉強になっている
- 割と仕事が楽しい
例えばアノテーションのような退屈な作業もありますが,概ね充実した日々を送れています.大学院でこの分野を専攻していた人がうらやましい,と思うこともしばしばです.技術的に面白いことがたくさんありますからね.仕事として,応用数学や応用物理に取り組みたい方にはお勧めできると思っています.
以上、ここまで読んでいただきありがとうございました.
感想・要望などありましたらお気軽に書き込んでくださいませ.
*今後,少しずつ内容を微修正するかもしれませんが,自分の経歴と学んできた内容はほぼ以上の通りです.
細かく追記する予定でおりますが「実はもっと専門知識のバックグラウンドがありました,未経験じゃありませんでした」なんてことは今後もありません.
内容を改訂した場合は,冒頭に追記致します.
[おわり]
学習したものまとめ
まず早速ですが学習したもの一覧をここにまとめようと思います.
いま機械学習・データサイエンスを仕事にするようになるまで学んだことがここにあります.要点だけを知りたい方はここをメインで読んでください.
講座 | 配布元 | 講師 | レベル | テーマ | 特徴 |
---|---|---|---|---|---|
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル | Udemy | 酒井潤 | 初心者から上級者 | Pythonの基礎から上級まで | エンジニア向けのPythonの書き方を解説.すべて終えることは想定されていない.今でも見返すことがある. |
Neural Network and Deep Learning (ディープラーニング専門講座) | Coursera | Andrew Ng | 初心者向け | 深層学習 | 概観と入門を開始.日本語字幕あるが教材は英語. |
Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization (ディープラーニング専門講座) | Coursera | Andrew Ng | 初心者向け | 深層学習 | ハイパラチューニング,正則化に主眼を置いた講義. |
Structuring Machine Learning Projects (ディープラーニング専門講座) | Coursera | Andrew Ng | 初心者向け | 機械学習プロジェクトへの落とし込み方法の基礎 | コードテストがなかったはず.深層学習の理論ではなく,データの分割の仕方を学んだりする. |
現役シリコンバレーエンジニアが教える未経験者のためのPythonドローンプログラミング | Udemy | 酒井潤 | 初心者向け | ドローン操作 | アプリを作ることが目標.Pythonで実践的なディレクトリ管理法やクラスの書き方を集中的に学べる. |
Autonomous Robots: Kalman Filter | Udemy | Daniel Stang | 初心者向け | カルマンフィルタの実装 | 自動運転をテーマ背景に置き,時系列データの予測法や可視化について理論と実装法を学ぶ.完全に英語. |
【Kaggleで学ぼう】Python と Keras で学ぶディープラーニング開発入門 | Udemy | 井上博樹 | 初心者向け | 深層学習,画像分類 | kerasを用いて画像分類法を学ぶ.今思うと非常に初心者向けでわかりやすい.質問対応もかなり丁寧. |
Convolutional Neural Networks (ディープラーニング専門講座) | Coursera | Andrew Ng | 中級者向け | 深層学習,CNN | CNNの本格講座.LeNet, ResNet,InceptionNetなど有名どころはすべて解説.物体認識のYOLOも扱い,実装テストがある.初心者ではきつい. |
Sequence Models (ディープラーニング専門講座) | Coursera | Andrew Ng | 中級者向け | 時系列データ,深層学習 | 時系列データを扱うアルゴリズムは解説・実装テストがあり. |
【PythonとStanで学ぶ】仕組みが分かるベイズ統計学入門 | Udemy | Tetsuya T | 初心者向け | ベイズ統計 | ベイズ統計の基礎から応用までを学ぶ.Jupyter notebook上で各自実行し,MCMC関連を主に学ぶ.変分推論などは扱わない. |
Git:はじめてのGitとGitHub | Udemy | 山浦清透 | 初心者向け | Git入門 | Gitの丁寧な説明がある.pushする方法を1から学ぶ.本講座は無料講座でありこのあとに有料講座まで受けるとGitを包括的に学ぶことが出来る. |
東大寄付講座【GCI2019Winter】 | 東大 松尾研 | 優秀な東大学生メンター | 初心者向け | Python基礎,データサイエンティスト育成 | データサイエンスの実務への応用を主眼に必要なスキルを養成する.解説が非常に丁寧.Slackグループがあり,受講者間でかなり盛んな質疑応答が行われる.Pythonの基本文法はあらかじめ知っておくのが望ましい. |
DataCampの講座たち(41講座+α) | DataCamp | 多数 | 初心者~中級者向け | Python | データサイエンスと機械学習についてものすごく学べる.解説→実装練習が徹底しており,実装力が1から鍛えられる(今後,別記事に書く予定). |
Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning (DeepLearning.AI テンソルフロー開発者 プロフェッショナル認定) | Coursera | Laurence Moroney | 初心者向け | Python, TensorFlow | 深層学習の学習初歩によくあるMNISTなどを使った分類などの解説(があったような気が・・・).かなり初歩的内容で簡単. |
Convolutional Neural Networks in TensorFlow | Coursera | Laurence Moroney | 初心者向け | Python, TensorFlow | Data Augumentation, Multiclass分類,Transfer Learningなど包括的に学べる.ネットワーク構造の発展的内容はない.flow_from_directoryなども実装し,本当の初心者から少し脱皮できる内容. |
Natural Language Processing in TensorFlow | Coursera | Laurence Moroney | 初心者向け | Python, TensorFlow | 自然言語処理の講座.RNN,LSTMについて理論解説はほぼなく,実装法に主眼.本講座に限らず,理論背景についてはAndrew Ngの講座を参照するように所々誘導がある. |
Python でわかる オブジェクト指向 とはなにか?【Python オブジェクト指向 の「なぜ?」を「徹底的に」解説】 | Udemy | Shotaro Hiramatsu | 初心者向け | Python, OOP | オブジェクト指向の発展の歴史から始まり,クラスの書き方で初心者が良く抱く疑問がしっかり開設される.selfなどにつまずく方にお勧め.実装練習も多い. |
Bayesian Methods for Machine Learning | Coursera | Daniil Polykovskiy, Alexander Novikov | 中級者以上向け | Python, ベイズ機械学習 | ベイズ機械学習についてかなり詳しく学べる.理論について解説が豊富.適宜論文紹介もあり,中級者以上がベイズ機械学習を初歩から学びたい場合にとても良い.完全に英語のみ.学習量は非常に多い. |
ベイズ推定とグラフィカルモデル:コンピュータビジョン基礎1 | Udemy | Toru Tamaki | 初心者~中級者向け | 確率論,コンピュータビジョン,ベイズ統計 | カバー範囲が非常に広く,辞書のように使える.無料講座.理論説明が詳しい. |