【結論】いきなりMNISTと呼ばれる0から9の手書き数字分類を試しましょう
”まずPythonをしっかり勉強して”など一歩一歩基礎を積み上げようと考えるかもしれませんが、 やりたいことが決まっているならそこから始めてその都度分からないことを後ろに戻って調べていくという方法をおすすめします。
【概要】
こんにちは、TOMOです。 今日は機械学習を始めようという初心者向けに大まかな勉強の方針に関して話します。
最初に学ぶべき知識
最初に学ぶべき知識は以下のようになります:
- Python言語
- Numpy(ナンパイ)
- Tensorflow
- Keras
- 数学はあればプラス、なくてもよし
- Linux(Ubuntu)を使ったほうが簡単、ただし私は基本Windowsなので必須ではない
実際のところディープラーニング(深層学習)の学習を始めるのに必要な基礎知識はほとんどありません。 高校生、大学一年生でも十分に使うことができます。 他のプログラミング言語を使ったことがある方であれば一か月もあれば画像分類等はできるようになります。
Pythonは比較的難易度の低い言語です。初心者が最初に始める言語としても悪くはないと思います。 プログラミング経験者であれば非常に簡単に習得できます。
ディープラーニングとか人工知能というと難しそうな印象を受けるかもしれませんが、 自分で論文を読んで実装したりしないのであればTensorflow・Kerasも数学や理論はほぼ必要ありません。
Pythonの特徴として、オープンソースのライブラリが大量にあるという点があります。 Pythonで直に処理を書くことは少なく、基本的にはライブラリを使うことになります。 そのため、Pythonを覚えることよりも自分に必要なライブラリの使い方を覚えることが重点となってきます。
Tensorflow・Kerasに関しては現在非常にホットな領域なので、ネット上に参考資料が大量にあります。 またGoogleが開発していることもあり、公式ドキュメントも非常に親切です。 MNISTの手書き数字分類に関しては、データのダウンロードからモデルの訓練、 数字の判別実行までコードをコピー&ペーストで試すことができます。 実行するだけなら一分でできます。
他に環境構築、ライブラリのインストール等必要ですが、これは初めての方はできる限り知り合いがいるならやってもらった方が良いです。環境構築に時間をかける必要はありませんので。 自分でやるとしたらまずPythonをインストールして、Tensorflowをインストールするわけですが、 公式サイトに詳細な解説が乗っています。 インストールするバージョン等を間違えなければそんなに難しくありません。
以上の理由により私のおすすめは:
- 詳しい知り合いに環境を作ってもらう(もしくは自分で調べる)
- Kerasを使ってMNISTの数字分類に挑戦
【各項目の解説】
これから各学ぶべき項目について解説していきます。
Python
機械学習をするには必須のプログラミング言語。
Numpy
Numpyとは数値計算を高速に実行するためのライブラリです。 Python言語自体の処理速度は遅いのですが、Numpy等のライブラリは主にC++で書かれているため、 これらのライブラリを使うことで非常に高速に計算ができます。
数値計算においてNumpyの使いやすさは別格です。NumpyがあるからPythonを使うと言っても過言ではありません。
Tensorflow
だれもが知っているディープラーニング用ライブラリ。
Tensorflowはバージョン1.Xと2.Xで非常に大きな変化があります。今から始める人は迷わず2.Xを選びましょう。
また、Tensorflowは現在でも非常に活発にアップデートされます。 毎回のアップデートごとに新しい機能が追加されたり、以前のコードが動かなくなったりします。 この点は常に新しい情報を収集する覚悟をしましょう。 資料を調べるときにいつ書かれたものかチェックすることも重要です。
Tensorflowの関数の使い方はNumpyに非常に似ています。 Numpyの関数をnp.xxxと使うところをtf.xxxと置き換えることで大半は正常に動きます。 その点では非常に学習がしやすいと言えるでしょう。
直接Tensorflowを使うのは直接数学関数を組み合わせて使うことになるので、難易度が高いです。 後述するKerasを使うと数学を意識することなくディープラーニングのコードを書くことができます。
Keras
ディープラーニングを簡単に使うためのライブラリ。 これを使うことでコードが非常にシンプルになり、簡単に、そして素早く開発を行うことができます。 感覚的にはレゴブロックを組み合わせて物を作る感じです。
以前はTensorflowとKerasを別々にインストールしていたのですが、現在はTensorflow自体にKerasが統合されています。 逆にTensorflowとKerasを別々にインストールしてしまうと、 Tensorflow内部のKerasと単独でインストールしたKerasは少し違いがあるため問題が生じる場合があります。 Tensorflowだけをインストールしましょう。
ディープラーニングの数学
数学の知識は必要ありませんが、簡単な線形代数と微積分(大学一年程度)があれば理解が深まります。 例えば、学校で合成関数の微分やニュートン法といった関数の最小値を見つけるアルゴリズムを習いますが、 深層学習とはこれをコンピュータを使って巨大な関数の最小値(実際には極小値)を見つけるというものです。
Linuxを使ったほうが簡単
ディープラーニングの研究をしている人はLinuxを使っていることが多いです。 そのため、Github等でコードを探すと多くの場合Linuxのシェルスクリプト等を使っています。 またLinux専用のライブラリを使っている場合もあります。 中級者の方が直接他の人の書いたコードを走らせようとすると、Windowsだと躓く可能性が高いです。
Tensorflow自体はWindowsとLinuxでほとんど差がありませんが、 独自の関数をカスタマイズして追加する等高度なことをしようとするとWindowsでは難易度が高いことがあります。
Linuxを使ったことがない、環境がない場合に無理をしてLinuxを始める必要はありません。 ただし少し高度なことをしようとするとWindowsはいばらの道になる可能性もあります。
個人的な話ですが、なぜ私がWindowsを使うかというと、 ディープラーニング以外にも、デスクトップやモバイルアプリを開発したり色々なことを並列でやらなければいけないのです。 そうすると最大公約数としてWindowsを使うことになります。 二台パソコンを使うということも考えているのですが、今のところ非常に面倒な場合を除いてWindowsで対応しています。
【まとめ】
今回のまとめとしては、まずディープラーニングをするにはNumpyとTensorflowが必須です。 Kerasを使うと数学の知識がなくても簡単にディープラーニングができます。 細かいことを勉強する前にとりあえずMNISTの手書き数字認識を試してみましょう。
Tensorflow以外にもPytorchなどのディープラーニングフレームワークはあるわけですが、 それらに関してはまた別の機会に。 それでは、また。