機械学習の勉強で大きな壁となる事が2つあると思います。1つめは数学がわからない、もう1つは機械学習のモデルを計算するための環境が無い事です。
数学が分からない人は勉強しましょう。例えば、以下の記事がオススメです。
機械学習のモデル構築は、既に作られたライブラリが沢山あるので、python がオススメです。この記事では、Google Colaboratoryの使い方を解説して、簡単な例を載せます。
Google Colaboratoryの起動
機械学習で何かをするにあたっては、性能の良いPCが無いとストレスが溜まります。
爆速CPU & GPU を無料で使えるサービスがGoogle から提供されています。 Google Colaboratory というサービス1で、jupyter notebook みたいなインターフェイスで何もせずともコーディング、コンパイルが出来ます。 一応スマートフォンでも開けますが、コードを書くのはキーボードが無いとつらいと思います。
colab の起動方法を解説していきます。
まずはGoogle Drive を開きます。Chrome のスタートページ右側からドライブをクリックしましょう。
Google Drivsveを開いたら左側の+マークをクリック→その他→colaboratory で、ファイルを作成します。
以下のような画面でpython のコードを書いたらShift + Enter でコードを実行してくれます。 python 以外の言語だと、hello world を出すために色々書かないといけませんが、pythonだとダブルクオーテーションかクオーテーションで括ってShift +Enter で出力できます。
Google colaboratoryのメリット
Google colabを使うメリットをあげていきたいと思います。
面倒な環境構築が必要ない。
初心者(管理人含む)にとって、プログラムを書く環境を整えるのは苦行でしかありません。計算したいだけならば、必要なライブラリとpython, GPUが入ったパソコンがあればそれで良いと思っています。python を始める為のお勧め環境構築!とかどうでも良いのです。モデルを作って、誤差関数を決めて、10000ステップパラメーターを更新したいだけなのです。
Google Colab ならば、それが出来ます。
初めから機械学習に必要なライブラリが揃っている
colabならimport hogehoge と打つだけで、必要なライブラリが殆ど使えます。使えない時は! pip install hogehoge でimport 出来るようになります。楽をする為に、sklearn やtensorflow, keras を良く使うと思います。公式ドキュメントは英語ですが、sklearnやkeras については日本語の解説記事が大量にあります。
GPU(TPU)が無料(!)で使える。
これが大きいです。PCでゲームをする人なら、グラフィックボードとしてGPUが入っていますが、一般のPCには計算に使えるようなGPUは入っていません。一方で、画像分類など、深いニューラルネットワークを使う問題に取り組もうと思ったらGPUは必須です。CPUだと1回の計算に30分かかるけど、GPUだと1分で終了とかザラにあります。GPUは編集→ノートブックの設定から使うかどうか決められます。コードを描き始める前に設定する必要があります。
さらに、Googleお手製のTPUと言われるものも無料で使用できます。Google の解説サイトによると、ResNet-50 というモデルのトレーニングにおいて、GPUより圧倒的に早いという実験結果が書かれています。TPUを使うときは、TPU用にモデルを変換してあげないといけないので、少し使い勝手が悪く感じます。
次に、1つだけなんですが、デメリットを挙げておきます。
連続して使用できない。
Google colabの仕様で、90分間操作しないと接続が切れます。計算を回していたとしても12時間連続で稼動していると、接続が切れます。かなり複雑で大きなデータに対するモデルのトレーニングは出来ません。仕事で使うのにはリスクがあります。もちろん学習したパラメーターは更新できた分は保存できるので12時間毎に接続しなおして途中から学習を再開するとかは出来ますが。
Google colaboratory で使うコード例
ブログ内に貼ってある画像は、殆どGoogle Colab 内で計算して書いたものです。
python による機械学習モデル作成方法について、記事を書くと思いますがコードを書くのに慣れる為に、以下に示す記事を書くために使用したコードの写経をしてみてください。
例えば、正規分布のグラフを描こうと思ったら、以下のコードを1つのセル2に描いて、Shift + Enter(コンパイル)です。3
import numpy as np import matplotlib.pyplot as plt import seaborn as sns from numpy.random import * import sys sns.set() mu=10 sig=10 X= normal(loc=mu , scale= sig , size =100) sns.distplot(X) plt.title("Gaussian Distribution") #plt.savefig("gaussian.png")
この調子で、グラフを4
描いてみましょう。 ポアソン分布のグラフを描くコード5を貼ります。
lam=10 Y= poisson(lam=lam, size =1000) sns.distplot(Y) plt.title("Poisson Distribution") #plt.savefig("Poisson.png")
カーネル法の記事で描いたカーネル回帰でサイン関数を学習するグラフは以下のコードで描けます。
n=50 a=np.random.normal( loc = 0,scale = 0.21, size = n) #ノイズの生成 x=np.linspace(-3,3, n) #y=x 用の数字 pix = np.pi * x y=np.sin(pix)/pix + 0.5 *x + a #直線 + サイン + ノイズの式 from sklearn.kernel_ridge import KernelRidge x=x.reshape(-1,1) clf = KernelRidge(alpha=0, kernel='rbf') #モデルの作成 clf.fit(x, y) p = clf.predict(x) plt.scatter(x, y) sns.regplot(x=x,y=y, order=1, scatter=False,label="Linear Regression") plt.plot(x, p, label ="Kernel Regression") plt.legend() plt.title("Fit by rbf kernel regression") #plt.savefig("kernel_regression.png")
まとめ
- Google神
- colab を起動すれば一瞬でpythonが使える。
- 複雑な計算を行うのにも十分な資源が無料で使える