見出し画像

新卒から2年間、機械学習エンジニアになり、初心者なりに働いてみた〜1年目〜

はじめに

新卒から2年間、機械学習の研究をしてきました。それが一区切りすることになりました。
私はこれから機械学習を導入していこう、そのためには、自分たちでしっかりとした理論を持ち、他部署に活用してもらおうという部署で2年間働きました。
機械学習を知らなかった私が、この2年で何を学んできたか、何を行ったのか、何を思ったかを書いていきたいと思います。細かい内容などはぼやかしている箇所があります。また、一個人の意見ですので、悪しからず。


1年目前期:Python・機械学習・線形代数・ニューラルネットワーク・データの前処理(エクセル)を学ぶ

●Python

業務(予測プログラムをつくる・何かを他部署に提案する)をするにあたり、勉強する時間をいただいたので、Pythonという言語をオライリー本で学習を開始した。C言語を大学でかじったことがあるので、変数の型定義をしなくていいことに衝撃を受けた。

ある程度すると、この本は辞書程度に使い、実際の機械学習のコードで勉強を使用と思い、次の段階に進んだ。

●線形代数

機械学習を理解するためには線形代数が必要!というより、様々な計算の基礎として必要だから勉強するべきと上司に言われ上記書籍を購入。
とても良い書籍だし、広く知識をカバーしてくれた。問題を解きながら、大学で学んだことを思い出した。後々勉強しておいてよかったと思えた。

●機械学習

SVM・Kernel法やTensorflowの使い方を勉強し始めた。特にSVM・Kernel法は、非線形のモデルも対応できる有能な技術とのこと。下記書籍でクロスバリデーションや正規化など、基本的な前処理を知り、実務に活用していった。Scikit-learnでの実装だが、

・Kernel法
・線形回帰
・SVM
・ランダムフォレスト
・Lasso
・次元削減 PCA/t-SNE
・標準化・正規化      などなどを学び、実装・概要を理解しました。

このあたりから社内のデータを頂いて実務を始めていた。
実務と言ってもこのころはデータの前処理全般だ。

・データの欠失
・数値データに日本語が入っている
・データ列がずれている

やはり人間が入力すると色んな入力をするために上記のようなことが起こる。データは目的によって変わる。開発現場の人は機械学習のために整形して入力しておこうなんて過去に思わなかっただろう。しょうがない。こういったこと等は手作業で直さなければならないため、対応を行う。エクセルの操作を知ることでこの前処理は効率化していった。
エクセルの操作はネットで調べる程度で解決できるので、書籍購入はなし。

●ニューラルネットワーク

Tensorflowは模写すれば、コードは動かせるが、理論を知る必要がある。

・誤差伝搬法
・Batch Normalization Relu Sigmoid
・Dropout
・勾配降下法

行列の計算を紙に書いて解きながら学習を進めた。ニューラルネットワークの動きを理解することで、感覚的にこうしたコードを書いたらいいのでは?一般的にこう言った層が使われるからこうしようと思えるようになった。

こういった簡単なプログラムをかけるようになったのもこのころから。しかし、当時、特に目的に合わせた予測モデルを構築するというのは難しかった。例えば、ネット上ではクラス分類予測の記事が多く、数値予測に関するものが載っていなかった。APIを漁った記憶がある。


1年目後期:実務を経験。現場のAIに対する見方の違いを思い知る。特徴量エンジニアリングの基礎を勉強

業務をこなしていくうちに他部署の方の話を聴きながら、要望を取り入れ、予測モデルを作っていくなどしていくことも増え始めた。そこで驚いたのは、案外AI・機械学習が万能ツールと思い込んでいる人が多いことだ。以下その内容。

・データの並びも綺麗に揃えてくれる。
・統計的手法でも時系列データを順番に認識して予測できる(このころRNNを知らなかった。RNNでできるのだろうが、それにしてもデータを綺麗にそろえないままそう言われてた。)
・データなしでもできる。(無から有を生み出す。) 
・データの質を向上させる            などなど。。。。。
言われるたびに、思っていることと違うかもしれませんが、、と言いつつ代案をだした or 代案を探した覚えがある。この経験は案外してよかったのかもしれない?

●特徴量エンジンニアリング
ただ、そこにあるデータを使い予測を行うというのは、目的の予測精度に届かないことが多い。データを加工して、特徴的なもの(数値や性質)だけを抜き出すことで予測精度は向上する場合がある。特徴量エンジニアリングはそれを行う奥義みたいなものと知った。簡単なところからいうと、

・正規化
・対数表現
・one-hot encoding
・word2vec               などなど

のちに以下の本で詳しく勉強した。

ほかにも、個人的に以下のようなものを勉強し、アウトプットした。

Rdkit

予測精度をあがったケースもかなりあったので、勉強してよかった。

1年目まとめ

・Pythonを習得した。
・線形代数・行列計算の重要性を知った。
・機械学習の概要を理解し、理論を勉強し始めた。
・特徴量エンジニアリングのポテンシャルの高さを知った。

1年目にして、かなり独習を行ったし、家での勉強をかなりやったつもりだ。しかし、勉強すればするほど、実務をすればするほど、勉強しないといけないことが増えて独学では難しいのでは?と思うようになった。機械学習だけでなく、予測モデルを構築する分野のドメインを理解する必要もある。業務を進める最適解が見つからず、1年目は終了した。

次回は2年目について書いていきたいと思います。ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?