サイトアイコン マサムネの部屋

Google Colab によるpython環境構築

機械学習の勉強で大きな壁となる事が2つあると思います。1つめは数学がわからない、もう1つは機械学習のモデルを計算するための環境が無い事です。
数学が分からない人は勉強しましょう。例えば、以下の記事がオススメです。

微分と勾配
機械学習では誤差関数の勾配を頼りに最適なパラメーターを探します。その時にしている偏微分の計算の仕方と勾配のイメージを解説します。
Pythonによるニューラルネットワークの実装①
ニューラルネットワークモデルをpython で1から作ります。この記事では、データを受け取って予測値を返す関数と、正解率を計算する関数を作成します。

機械学習のモデル構築は、既に作られたライブラリが沢山あるので、python がオススメです。この記事では、Google Colaboratoryの使い方を解説して、簡単な例を載せます。

スポンサーリンク

Google Colaboratoryの起動

機械学習で何かをするにあたっては、性能の良いPCが無いとストレスが溜まります。
爆速CPU & GPU を無料で使えるサービスがGoogle から提供されています。 Google Colaboratory というサービス1で、jupyter notebook みたいなインターフェイスで何もせずともコーディング、コンパイルが出来ます。 一応スマートフォンでも開けますが、コードを書くのはキーボードが無いとつらいと思います。
colab の起動方法を解説していきます。
まずはGoogle Drive を開きます。Chrome のスタートページ右側からドライブをクリックしましょう。

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は編集→ノートブックの設定から使うかどうか決められます。コードを描き始める前に設定する必要があります。

ノートブックの設定からGPUやTPUを使うか選択できる。

さらに、Googleお手製のTPUと言われるものも無料で使用できます。Google の解説サイトによると、ResNet-50 というモデルのトレーニングにおいて、GPUより圧倒的に早いという実験結果が書かれています。TPUを使うときは、TPU用にモデルを変換してあげないといけないので、少し使い勝手が悪く感じます。

Tensor Processing Unit(TPU)
専用設計された Google Cloud の Tensor Processing Unit(TPU)は、ML ワークロードを高速化します。詳細については、今すぐ Google Cloud までお問い合わせください。

次に、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")
colabのセルに張り付けた
上記コードの実行結果

この調子で、グラフを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")
コード実行結果

まとめ

  1. colab と略します。
  2. 1行ごとにコンパイルしても良いです。
  3. numpy はナンパイと発音します。ヌンピーじゃありません。
  4. #の書かれた行は、コンパイル時無視されます。上のコードで#を消すと、gaussian.png という名前でグラフの画像が保存されます。
  5. 上のソースコードから続ける場合はimport hogehoge はする必要ありません。