はじめに
未経験から機械学習エンジニアになって2年が経った節目にここに至るまでの経緯を紹介します。
初期スペック
- 30代
- 高専卒
- 工場勤務
- 数学は学生時代は並みの上くらいだったがほとんど忘れてる
- プログラミングスキルゼロ
- パソコンスキルはオフィスソフトが事務作業レベルで使える程度
- タイピングできる
初期のモチベーション
- 今の仕事は今の会社じゃないと役に立たないスキルしか身につかないと感じ、何か自力で稼げるスキルを身に着けたい。
- 人生の大半の時間を費やす仕事を苦痛で終わらせたくない。楽しい仕事がしたい。
- パソコン触るの好きだし、プログラミングとかどうなん?(機械学習なんて言葉も知らない)
取り組んだこと 1/2
-
まずは触ってみる
プログラミングのプの字も知らなかったので、最初に取り組んだのが Progate でした。はじめはHTMLとCSSでWebページを作ることからはじめました。しかし、Progateの教材と書籍を2冊くらい終わらせた段階で、Webページ作成に「作業感」を強く感じるようになりそれ以上やらなくなりました。 -
テーマを変えた
プログラミングで他にできることを探す中で、「Kaggle」を知りました。KaggleはAIの技術(機械学習、深層学習)を用いてデータ分析するコンペで、自分の中で凄く魅かれるものがありました。調べていくと、どうやら Python というプログラミング言語を使えないと話にならないらしい。そこから Python の習得を目指します。 -
Python の学習
- Progate や書籍で基礎文法をインプット
- Paiza にある命題通りのアルゴリズムをプログラミングするスキルチェックでアウトプット(EからSまでランクがあり、Bまではスムーズに上げれた)
-
機械学習の学習
- 下記、教材で勉強しました。括弧内は難易度です。
- Udemy
- YouTube
- Coursera
- 機械学習専門講座(高)
- Kaggle
- 書籍
中間スペック 1/2
- Pythonの基礎文法はすらすら書ける。
- Pandas、NumPy、scikit-learnをある程度使える。
- anacondaで環境構築ができる
- XGBoostを使って仮想通貨の予測モデルを作った。今思えば精度やコードの効率はめちゃくちゃだが、入手可能なデータを用いてそれっぽいアウトプットを出すことができたため、自信をつけることができた。
取り組んだこと 2/2
- 本気でやる決意表明として会社を退職し、プログラミングスクールに入校した。
- スクールでは、機械学習のアルゴリズムをスクラッチで実装することによって理論的な理解を中心に学んだ。(線形回帰、ロジスティック回帰、SVM、決定木、CNN、活性化関数、損失関数など。)
- 学習内容はゼロつく系の書籍やYouTubeなどで代用可能だったと思う。それ以上にスクールで短期間同じ目標に向かって高め合える仲間が出来てモチベーションを保つことができたことが大きかった。
中間スペック 2/2
- Pandas, Numpy, scikit-learnが使える
- Pytorch, tensorflowがある程度使える
- 機械学習アルゴリズムの理論がなんとなくわかる
- スクール在籍中に取り組んだKaggleで銅メダル獲得している
就活時の体験
- スクールを卒業した段階で、Wantedlyや直接応募を試みるが、全く相手にされない状況が続いた。
- 3ヶ月が経過しても面接すら受けられず、危機感を感じて就活を中断し、実績を積むことに専念した。
- 再び Kaggle に挑戦し、銀メダルを獲得した。
- また、Python3 エンジニア認定データ分析試験に合格した。
- 就活を再開したところ、すぐに面接に進め、内定をいただくことができた。
就職直後の感想
- 入社してすぐに機械学習のプロジェクトに参加できたことが嬉しかったです。
- 自分がこれまでに学んできたことが活かせ、初めから業務に貢献できたことで、自分の学びが無駄にならなかったことを実感しました。
- ただし、自分自身はまだまだ未熟なエンジニアであり、DB、Linux、Docker、Git、AWSなどの基本スキルについては十分に身につけていないと感じました。
現在の感想
- 入社してから2年が経ち、今では前述の基本スキルに関してはかなり身についてきたと感じています。
- また、自然言語処理系のプロジェクトに携わる機会が多く、そこでの経験を通じて、自然言語処理に関する知識やスキルを磨くことができました。
- しかし、大規模なプロジェクトでは、組織内外の特別な理由により全て理想通り事が運ばないことも実感しました。
- 例えば、意思疎通の齟齬や予算的な問題によって生じることがあります。
- そうした場合は、自分自身が柔軟かつ適切な対応をすることが重要だと思いました。
- また、チームメンバーとの協力やコミュニケーションを密にし、改善点を見つけ出すことが重要です。
- 自分自身がこれらの課題に対して適切に対応し、プロジェクトを成功に導くことができるようになりたいと思いました。