ディープラーニングを、世界一簡単に実装する方法を見つけましたのでご報告します。

ディープラーニングとは

ニューラルネットワークというアルゴリズムがあり、『入力層』・『中間層』・『出力層』の3つに分かれるのですが、このうち『中間層』を多層化したものをディープラーニングと呼びます。機械学習のアルゴリズムの一つです。

ディープラーニングの得意分野

画像認識分野で非常に高い性能を発揮します。理由は、畳み込みニューラルネットワークとReLU関数です。畳み込みニューラルネットワークにより、画像の特徴を適切に捉えることが出来るようになりました。ReLU関数では、誤差逆伝播法で微分が1になることから、勾配が消えなくなるという問題を解決しました。またそもそも計算量が低いため、活性化関数として非常に利用されています。

音声認識分野でも、音声の「あ」とか「い」とかの波形があるのですが、その波形を画像と見立て分類することで、素晴らしい性能を発揮しています。

ディープラーニングは特徴量設計がいらない

ディープラーニングが流行った理由は、特徴量を自動抽出できるからです。従来の機械学習のアルゴリズムでは、人間がデータから特徴量の設計を行わなければいけませんでした。特徴量設計には、業務スキルと機械学習のスキルが求められ、1カ月くらい時間がかかります。この作業がゼロになったため、ディープラーニングはすごいという事になりました。

ただ、ディープラーニングの精度が他のアルゴリズムに優れているかどうかはまた別問題です。以前マーケティングデータ3000件を使った分類問題で、アルゴリズム別の比較実験をしましたが、決定木に精度で負けてました。データ量がせめて5000件はないとディープラーニングはまともな精度が出てきません。

まあそのうちディープラーニングのアルゴリズムも改良されて、少数データで画像分類以外でも性能が出てくるようになります。データサイエンティストがいらなくなる未来が、すぐそこまで来ています(やばいです)。

Scikit-learnでディープラーニングを実装する

たった12行で、その人がニートかどうかを判別するディープラーニングを実装できました。Scikit-learnのMLPClassifierを利用しています。実際のコードは以下の通りです。
#scikit-learnから必要な関数をインポート
import numpy as np
from sklearn.neural_networkimport MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix

#データの読み込み
data = np.loadtxt("neet.csv",delimiter=",", skiprows=1)

#特徴量データをXに、教師データをyに格納
X = data[:, 0:-1]
y = data[:, -1]

#学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

#ニューラルネットワークで学習と評価 
clf = MLPClassifier()
print cross_val_score(clf, X_train, y_train, cx=10)

#混合行列で評価
y_predict = clf.predirct(X_train)
print confusion_matrix(y_train, y_predict)

scikit-learnが最強すぎて泣けてきます。GPUには対応していませんが、ちょっと事前検証するにはもってこいのライブラリです。
ちなみに上記のコードでは、あまり精度が出ませんでした。理由はパラメーターをデフォルトのままだからです。ニューラルネットのモデルは、デフォルトの隠れ層の数1、ノード数100を設定しています。本当はいろいろ試して、最も良さそうなモデルを探す必要があります。

なのでグリッドサーチで探してみました。グリッドサーチは、総当たりでパラメータを探し、最も精度の高かったパラメータを教えてくれます。
from sklearn import grid_search

#ニューラルネットワークの隠れ層の候補をいろいろ定義
parameters = {'hidden_layer_sizes' : [(100,), (100, 10), (100, 100, 10), (100, 100, 100, 10)]}

#ニューラルネットワークのベストな隠れ層を探索
clf = grid_seatch.GridSearchCV(MLPClassifier(), parameters)
clf.fit(X_train, y_train)
clf.best_params_

手元のデータでは、隠れ層が3層の時に、最も精度が高いと出力されました。必ずしも層の数を増やすと精度が上がるわけではありません。ディープラーニングは表現力が高いため、教師データの数が少なすぎると、過学習が発生して精度が下がることがよく起きます。

参考記事:これだけは知っておけ!PythonでAI開発の基礎まとめ

これからディープラーニングを実装する人へ

最後にディープラーニングを動かして思う事を、つらつら書いていきます。

・教師データが1万件を超えてくると精度が高くなってくる。
・教師データが少ないと、非常に精度が低くなる。分類問題で20%の精度とか普通にある。鞍点に落ちていると思われる。
・特徴量の数を変えて実験したが精度が安定しない。SVMやランダムフォレストはやはり安定感あるので、実務ではこっちを使いたくなる。
・ディープラーニングは中のモデルがブラックボックスになるので、結果に対して説明できないのは辛い。
・ディープラーニングはパラメータの数が多すぎ。潤沢な分析環境は必須。
・画像とテキストデータ以外でのディープラーニングの活用は少し早いかも。



本気でAIエンジニアを目指す方はAIスクールがおすすめ

これまでプログラミングに触れたことのない方にとって、機械学習やディープラーニングを学ぶことは少しハードルが高いと感じられたかもしれません。

機械学習の難しさに加え、分からない部分の調査に時間がかかったり、勉強の持続が大変だったりといくつか課題感があることは事実です。

pythonは人間の論理的思考に近いと言われており、javaなどよりはるかに取っつきやすい言語ではありますが、独特の癖があったりします。
一人で文字コードなど細かいエラーを調べていると、平気で3時間とかかかります。もし知ってる人に聞けば5分で解決できたことでしょう。

もしあなたが、効率的に機械学習を学び、短期間でにAIエンジニアに転職したいと考えているならば、インターネット上のプログラミングスクールに通う方法もあります。

プログラミングスクールの老舗であるTechAcademyに、最近AIコースが新設されました。

TechAcademyのAIコースの特徴

①python, pandas, scikit-learnを使った人工知能の開発ができるようになる
②機械学習・ディープラーニングを体験的に理解できる
③AIコースのメンターがガチ優秀でサポート体制が盤石
④個人のレベルに合わせて学習スケジュールを立ててくれる
⑤他社の大手オンラインスクールと比べて費用が安い

以下の図に、機械学習を独学で学ぶ課題と、TechAcademyで解決できること整理しました。人工知能ブログ画像1

TechAcademyは、1カ月コースで13万円程度のお金がかかります。決して低くない金額です。
しかし、プロの専門家があなたの勉強に並走することで、効率的に学習が進み、短期間で機械学習のスキルを身に付けられることは間違いないと思います。

TechAcademyをもう少し詳しく知りたい方には、 無料のオンライン説明会動画 もあります。メンターのサポート、学習の進め方、実際の受講風景が分かります。
学習のイメージを掴むためにも、まずは見てみることをおすすめします。


ディープラーニングに代表される人工知能が、これからの未来を大きく変える技術ならば、人工知能の知識は、あなたの未来を強く明るく照らしてくれるはずです。


関連記事:AIエンジニアが教えるゼロから機械学習の勉強法