learning.ikeay.net

文系エンジニア、AI勉強中。

ABEJA Innovation Meetup #3

人工知能やIoTを活用したビジネスを行う株式会社ABEJAの勉強会に参加してきました。
&CODEIQ MAGAZINEにて記事を書きました。

人工知能機械学習ディープラーニング――これらの技術はGoogleMicrosoftFacebookをはじめとした大型IT企業が牽引している側面もありますが、昨今、これらの技術を活用した事業を展開するベンチャーが続々と誕生しつつあります。今回はその最先端テクノロジーを紹介する勉強会に参加してきました!

codeiq.jp

どうぞこちらの記事もよろしくお願いいたします。

機械学習の種類: 教師あり学習編

こんにちは、@ikeayです。

機械学習にもいろいろなモデル(アルゴリズム)があります。これらのモデルは優劣だけではなく、得意分野・不得意分野があったりするので、解きたい問題に応じて最適なものを選びます。

f:id:ikeay:20160502153857p:plain
scikit-learnより

どういう時にどういうモデルを使えばいいか、scikit-learnが用意しているチャートを参考にすると分かりやすいですね。

機械学習はまずは大きく、「教師あり学習」「教師なし学習」「強化学習」に分けられます。ざっくり説明すると、「教師あり学習」は問題と答えがセットになって学習する方法、「教師なし学習」は正解不正解のデータが入っていないので、クラスタリングや外れ値検出で傾向をつかむ学習方法、「強化学習」はいいことをしたら報酬を与えていく学習方法です。以下の記事にざっくりとまとめてあります。

learning.ikeay.net

今回はその中でも教師あり学習のモデルにフォーカスしてみたいと思います。

事前準備

今回はscikit-learnを使った各モデルのプログラムも書いていきたいと思うので、事前に分析するデータを準備しておきましょう!
事前準備として、データセットをインポートしたり、そのデータを学習しやすいかたちに整える必要があります。

まずは、scikit-learn上でテスト用に用意されているデータ(irisといわれるあやめの花のデータ)をインポートして、そのインポートしたデータを学習用データとテスト用データに分割します。

from sklearn import datasets
from sklearn import cross_validation
iris = datasets.load_iris()
train_X, test_X, train_y, test_y = cross_validation.train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)

次にデータを標準化します。だいたいデータというものは、カラムごとに値の幅にバラつきがあるので、そのバラつきを抑えていきます!
(平均0、分散1になるようにします)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(train_X)
train_X = sc.transform(train_X)
test_X = sc.transform(test_X)

こうすることで、こんなデータを

[[ 5. 2. 3.5 1. ] [ 6.5 3. 5.5 1.8] [ 6.7 3.3 5.7 2.5] [ 6. 2.2 5. 1.5]...

こんなデータにすることができます。

[[-1.02366372 -2.37846268 -0.18295039 -0.29145882] [ 0.69517462 -0.10190314 0.93066067 0.73721938] [ 0.92435306 0.58106472 1.04202177 1.6373128 ] [ 0.1222285 -1.92315077 0.6522579 0.35146505]...

下準備完了です!

決定木

まずは決定木というモデルについて触れていきます。
決定木はツリー構造になっている人間にも非常にわかりやすいモデルです!
Yes、No、Yes、Noというかんじでたどっていくかんじ。

f:id:ikeay:20160713102222p:plain
決定木 - Wikipediaより

いいところ
  • ツリー構造になっているので、人間にとって意味がわかりやすいモデル!
  • 決定木の派生モデルで、大量の決定木を作成して、それぞれの決定木が導いた答えから多数決するモデル「RandomForest」も優秀なモデルとして有名。(Kinectの身体部位推定に採用されていたりします)
わるいところ
  • 過学習しやすい。
  • 難しいデータは苦手。
  • X軸やY軸などの軸と平行にざっくざっく切り分けることしか出来ない。

コードにするとこんなかんじ

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
clf = DecisionTreeClassifier()
clf.fit(train_X,train_y)
pred_y = clf.predict(test_X)
accuracy_score(test_y, pred_y)

出力!

0.97777777777777775

accuracy_scoreメソッドは正解率を出してくれます。
決定木でも約97.7%と、けっこういいスコア出ますね!

図を出力してみるとこうなりました。

f:id:ikeay:20160713101916p:plain

パーセプトロン

人のニューロンをモデル化したモデルです。これがいま活躍しているモデルたちのだいたい元祖となっています!ディープラーニングもそうです。

f:id:ikeay:20160713102444p:plain
高卒でもわかる機械学習 (2) 単純パーセプトロン | 頭の中に思い浮かべた時にはより

いいところ
  • モデルがシンプルでわかりやすい。
  • 元祖!!
わるいところ
  • まっすぐ線でしか情報を切り分けれません!!(これを「線形分離」と呼びます)
  • 第一次ブームの立役者でありながら、「線形分離しかできないじゃん!精度悪いじゃん!!」と言われて研究費をがっつり引かれてしまうことになるのであった…
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
clf = Perceptron(n_iter=100, eta0=0.1)
clf.fit(train_X, train_y)
pred_y = clf.predict(test_X)
accuracy_score(test_y, pred_y)

こちらも97.7%ほど。

0.97777777777777775

f:id:ikeay:20160713102618p:plain

ロジスティック回帰

ディープラーニングの一層版。ディープラーニングはこのモデルの多層版と考えると分かりやすいかも。

f:id:ikeay:20160719135813p:plain
https://inst.eecs.berkeley.edu/~cs194-26/fa15/upload/files/projFinalUndergrad/cs194-au/より

いいところ
  • どのくらい確信をもてるのか、確信度が分かる(上のグラフでいうとグラデーションの色が濃いところほど確信度が高い)
  • 学習が簡単
わるいところ
  • 通常は線形分離不可能
  • SVMよりは精度低いかも
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
clf = LogisticRegression()
clf.fit(train_X, train_y)
pred_y = clf.predict(test_X)
accuracy_score(test_y,pred_y)

あれれ

0.82222222222222219

82.2%。だいぶ落ちたなあ。データセットとの相性が良くないのかも。

f:id:ikeay:20160713102903p:plain

SVM

区切り(識別超平面)とデータの距離を最大となるようにするモデル。超平面の近くにあるデータ(サポートベクトル)だけをみてどこで区切るかを決めているので、計算量が少なくてすむ。

f:id:ikeay:20160713103901p:plain
OpenCVで遊ぼう!: 年賀はがき当たりチェックアプリとSVMより

いいところ
わるいところ
  • 学習にちょっと時間がかかる
  • 通常はバッチ学習。データを1回で全部学習してしまおうとするので、データ量が多いと学習時間が苦しくなります。
  • 通常は線形分離しかできない…!ただし、カーネルトリックと呼ばれる魔法を使うと非線形にもできたり、パラメーターをなんやかんや調整すると、かなり優秀なモデルになります!scikit-learnではデフォルトで非線形になっている模様。
from sklearn.svm import SVC
clf = SVC()
clf.fit(train_X, train_y)
pred_y = clf.predict(test_X)
accuracy_score(test_y,pred_y)

97.7%ほど。最強なはずなのにこのデータセットだと差が出ませんねw ちなみに上記のプログラムはデフォルト値になってますが、パラメータサーチでパラメーター調整をしても、今回は値は変わりませんでした。

0.97777777777777775

scikit-learnではデフォルトで非線形モデルが採用されています。 ここではカーネルトリックという次元の呪いを解決できる魔法を使っています。これもSVMが最強だといわれる所以のひとつ。

f:id:ikeay:20160713103136p:plain

まとめ

まだまだいろいろなモデルが存在しますが、代表的なモデルについてとりあげてみました。
たとえ決定木のように直線にしか切れなくても一概にダメなアルゴリズムとは言えません。その分、計算がめちゃめちゃ早くて優秀だったりします。
初心者の場合、まずはいろいろなモデルを試して、精度と速度を吟味して決めましょう!


Special Thanks: 松尾研 鈴木さん、PARTY 宮本さん

機械学習のためのPythonの基礎「NumPy」を学ぶ

機械学習といえば「Python」です。なぜPythonなのかというと、数値演算や機械学習に関するライブラリがたくさん揃っているからだそう。行列がとても扱いやすいNumPy、グラフ描画が簡単にできるmatplotlib、機械学習のscikit-learnなどなど… 機械学習ではこの3つのライブラリを大いに活用します。

まずは今回はscikit-learnを使った機械学習ではかなり重要になってくる「NumPy」を学びます。
私はPythonもはじめてなのでまずはPythonの概要を把握しつつ、「100 numpy exercises」というNumPyを基礎から学べる問題集を写経して学習したいと思います。

環境構築

まずは環境構築です。詳しくは下記のリンクに飛んで確認いただきたいのですが、Macの場合は、Pythonバージョン管理システムである「pyenv」と、分析環境を構築するのに便利な「Anaconda」をインストールします。Anacondaをインストールすることで、Pythonはもちろんのこと、NumPyやmatplotlib、scikit-learn などのパッケージをまとめてインストールすることができるのでとても便利です。
最近はpython3.x系はまだ不安定だから2.x推奨だったのが、3.x系だと動かないライブラリもある…程度に改善されたようです。が、機械学習界隈ではまだまだ2.xが現役なようです。(私は2.x系を入れました)

Mac(homebrew + pyenv + Anaconda)
qiita.com

その他OSはこちら qiita.com

Pythonを知ろう!

NumPyの前にPythonを知ろうと思って、ドットインストールの動画のざざっと流し見しました。流し見するだけでも自分が学んでいる言語との違いがわかるのでおすすめです。
Rubyistから見てみれば、PythonRubyと似ているところも多いのですが、違うところもちょこちょこあるので見ていて面白かったです。

なお、下の講座は最後の更新が2013年なので当然のようにPython2.x系が使われています。

dotinstall.com

100 numpy exercises を写経してNumPyを基礎から学ぶ!

100 numpy exercisesはNumPyをコードの中にインポートするところから問題にしてくれている、NumPyを基礎から学ぶためにはもってこいの問題集です。問題のすぐ下に答えも書いてあるので、Let's 写経!
私は星ふたつまで取り組んでみることにしました。

github.com

分からなくなったらGoogle先生に聞いたり、Numpyのドキュメントを読んだりしました。
あとあと、Pythonは配列操作が独特なので、こちらも見ておくと◎かもしれないです。

www.yoheim.net

ちなみに、学習するときにはJupyter(IPython Notebook)を使うのがおすすめです。
Jupyterは、私の中では「Markdownでメモも残せるし、プログラムを実行できる便利なメモ帳」という認識です。
もともとはIPython Notebookという名前だったらしいのですが、最近は多言語対応をしているため、Jupyterという名前に変わったそうです。

Anacondaをインストールしている場合は、もうすでにこちらもインストールされています。ターミナルにjupyter notebook もしくはipython notebook というコマンドを打ち込むと、ローカルサーバーが立ち上がり、homeディレクトリの一覧が表示されます。ここから任意の場所に移動し、ファイルを編集したり、新規で作成したりします。

f:id:ikeay:20160601142035p:plain

便利です。ぜひ使ってみてください!


Special Thanks: 松尾研 鈴木さん、PARTY 宮本さん

機械学習の基礎知識としての数学

私がAI(人工知能)や機械学習って難しいナーと感じるところは、数学の前提知識がある程度必要なところです。
GoogleからTensorflowが出たときに、私もいっちょやってみるかなんて思ったのですが、参考にした記事もなかなか難しくてあんまり理解できなかったのを覚えてます。途中まで理解出来てたのに、急に数式が出てきて「なるほどわからん!」ってなることが多かったですね。

「というかエンジニアなのに数学苦手なのw」とビックリされる方もいらっしゃると思いますが、エンジニアっつったって、今の御時世理系出身エンジニアばかりじゃないんです。でもエンジニア女子やってると自動でリケジョ扱いされるから面白いですね。

当面の目標としては、AIの中でも機械学習を学んでいきたいので(DeepLearningできるようになりたい!)、あると嬉しい数学の知識としては以下です。

  1. 線形代数
  2. 確率・統計
  3. 微分積分

AIの研究や仕事で本格的に使っていくためには大学レベルの数学の知識が必要ですが、今回はとにかく早めに実践編に入門できることを目指しているので、このへんの分野をざっくり復習したいと思います。実践を通して足りないなと感じる部分はあとから勉強していく予定です。

線形代数機械学習入門でも必須。確率統計や微分積分は入門ではすぐにはいりませんが、特に「統計的機械学習」という分野においては超必須らしいです。

特に私の場合は線形代数は勉強していないこともあり、
線形代数>>>>>確率統計>>微分積分
くらいの優先順位で勉強&復習していきたいと思います。

線形代数

機械学習でやってることは基本的には行列の計算らしく、線形代数はまじで重要っぽい!線形代数に関しては高校の教科書(私は高校で数Cやらなかったので、妹から譲ってもらいました!)と、以下の本を参考書としました。

プログラミングのための線形代数

プログラミングのための線形代数

この本は線形代数に関する本ですが、「プログラミングのための」となっているし、私にもいけるんじゃないか?!そう思って購入してみました。
結構分厚いですが、この本でいうと、「第0章動機」「第1章ベクトル・行列・行列式」「第3章コンピュータでの計算」が特に大事なのでざっくり理解しておく&他のところもなんとなく流し読みしとくといいね!という感じだそう。

確率・統計

確率・統計に関しては、以下のスライドでざっくり理解したつもりになりました。
読む前にΣを復習しましょう。大丈夫、Σはつまりfor文のことだからエンジニアだったら理解しやすいはずだ!

これは
{ \displaystyle
\sum_{i=0}^{7} x_i
}

つまりこれのこと。

int sum = 0;
for(int i=0; i<=7; i++){
  sum += x(i);
}

for文で理解すると私的には大変分かりやすかったです。

まずは統計の基礎の基礎。

そして統計に関する資料をナナメ読み。


微分積分

微積は自分で高校の頃の教科書でも開いてやっといてね!と言われたのですが、とっくに捨てたわ!大学受験終わった瞬間に教科書全部捨てたわ!

微積はエンジニア活してるとなんだかんだいろんなところで必要になってくるので、私そろそろできるようになっとくといいと思ってます。たしかに微積に至っては高校時代はなんとなく出来てたはずなんだけど、恐ろしいことに完全に忘れているだと…?!

インターネット上にあるものはちょっと詳しすぎたりパット見難しいものが多かったりしたので、こんな書籍でざっくりと復習しました。

知識ゼロからの微分積分入門

知識ゼロからの微分積分入門

微積を学ぶための前提知識についての開設もあるので、知識ゼロからスタートできる書籍でした。微積の起源やビジネスマン的微積の使い方なんかも知れて面白かったです。

今は教材が揃ってないみたいだけど、揃ってくるとNHKの高校講座で勉強してもいいかなと思ったり。
NHK高校講座 | 数学2

数1の方は現段階では揃ってるのでいいかんじに勉強できそう。他の分野も復習しとこうかなという方にはオヌヌメです。
NHK高校講座 | 数学1

おーい、「数学なんて勉強しても将来なんの役にも立たないんじゃない?」とか言ってる中学・高校生諸君〜〜!!! 高校時代の数学、社会人になっても意外と使うかもしれないから、みんなやっとこうな!!


Special Thanks: 松尾研 鈴木さん、PARTY 宮本さん


追記: for文で説明しているところ「i<7」→「i<=7」に修正しました。失礼いたしました。

機械学習ってなんだろう

こんにちは、@ikeayです。
前回は人工知能とはなんぞやということに触れたので、今回は機械学習について学んだことをざっくりまとめます。

learning.ikeay.net

機械学習とは、ざっくりいうと何かを学習して何かを予測すること。最近流行ってるDeepLearningというやつも機械学習の一種です。

機械学習の種類は、大きく3つに分けられます。

  1. 教師あり学習
  2. 教師なし学習
  3. 強化学習

教師あり学習とは?

教師あり学習は、学校のテスト勉強に似ています。問題集を解いて学習してからテストに挑む。これが教師あり学習です。教師といいつつリアル教師は出てこないですが…
問題と答え(機械学習ではこの答えのことを「ラベル」と呼びます)のセットから傾向を学習し、新しいデータがどこに分類されるか予測をします。
教師あり学習の中でも、だいたい分類問題回帰問題に分けられます。

分類問題

こういうデータは
f:id:ikeay:20160502151846p:plain

こうじゃ!
f:id:ikeay:20160502151854p:plain

だいたい青と緑の境目のところに線を引きます。新しいデータが線の左側にきたら青に近しいデータ、線の右側にきたら緑に近しいデータと分類できます。スパムメールの分類とかに使われてます。

回帰問題

こうやって
f:id:ikeay:20160502151258p:plain

こうじゃ!!
f:id:ikeay:20160502151322p:plain

簡単に言うとデータ群から線を求めるのが回帰問題というやつです。株価の予測とか明日の気温の予測なんかに使われています。

教師なし学習とは?

教師なしというのは、つまり正解不正解のデータがないってことです。そのままデータをつっこんじゃうのがこの学習方法。
クラスタリングしたり、外れ値検出したりして、なんとなく傾向をつかみます。

値が近いデータをまとめてクラスタリングしてやったぞ。
f:id:ikeay:20160502152240p:plain

外れ値見てみようぞ。センサーの異常値検出とかにイイね!

f:id:ikeay:20160502160234p:plain
Wikipediaより

多様体学習と呼ばれるのも教師なし学習の一種。 次元数の多いデータから次元を削減して学習しやすくする何かです。

f:id:ikeay:20160502155758j:plain
知能システム制御研究室 | 情報科学研究科 | NAIST 国立大学法人奈良先端科学技術大学院大学 Webサイトより

クルってなってるデータを、次元数を削減すると広げられるの!!それで分析すると簡単でしょ?
(゚Д゚)?!?!?!?!

強化学習とは?

機械学習には、強化学習という方法もあります。強化学習というのはつまり、いいことをしたら報酬を与えていくという学習方法です。犬のしつけっぽいですね!最初はうまくいかなそうに見えるんですけど、どんどん効率的な方法を学んで賢くなっていくので驚きです。

youtu.be

この動画では、ブロックを崩して得られるポイントを報酬としています。試行錯誤を繰り返した末、独自の方法まで編み出してゲームをクリアしてます。
人だったらボールとコントローラーを認識して、ボールの動きにあわせてコントローラーを動かすと思うのですが、コンピューターにはそんなことは認識できません。ピクセル単位でこういう流れで画面が変化すると勝てるって感じで認識しているようです。

最近ではロボット分野でも強化学習が行われています。以下の動画ではロボットが穴の空いた部品に棒を通そうと試行錯誤をしているのですが、その様子がまるで何かを習得しようとしている子どものようで、ちょっと怖いです(不気味の谷現象?)。

www.youtube.com

ざっくりしたまとめ

今回は機械学習を大きく3つに分けましたが、細かくはいろんなアルゴリズム(モデル)があります。機械学習にどんな種類があるのかを知り、どんなときにどのアルゴリズムが適しているかが分かれば、scikit-learnやAzure上からけっこう簡単に使えるみたいです。

f:id:ikeay:20160502153857p:plain
scikit-learnより

上の図はscikit-learnのWebサイト上で公開されているチャートシートです。どのタイミングでどのモデルを使えばいいかチャート式ならわかりやすいですね。 教師あり学習は、classification(分類問題)、regression(回帰問題)、教師なし学習は、clustering(クラスタリング)、dimensionality reduction(次元削減)に大きくわけられていますね。scikit-learnでは強化学習が扱えないので、この図では強化学習には触れられていません。

今回はここまでです。


Special Thanks: 松尾研 鈴木さん、PARTY 宮本さん

文系エンジニアだけどAIを勉強してみる

こんにちは、@ikeayです。

突然ですが、最近すっかり人工知能(AI)がバズワードになってきていますね!

ここ最近だけでも、GoogleのAlphaGoが世界トップ棋士であるイ・セドル氏に勝利したことが世の中の話題をかっさらっていったのを皮切りに、レンブラントっぽい絵を生成するやつとか、1枚の絵を組み合わせて1枚の絵をつくるやつとか、自動でJazzを生成するDeepJazzだとかetc, etc...

こうしてみると、この技術でほんとに職失いそうだし、芸術とはなんぞやということになりそうだし、人類滅ぼされるかもしれないし(偏見)、もうほんと怖いしつらいですよねー。

特に最近はAI絡みで毎日何かしらのニュースがあるので、日々ヒヤヒヤしてます。(あ、TechFeedってテクノロジーに特化した情報キュレーションサービスがあるんですけど、それで「人工知能」とか「深層学習」とかを登録しておくと毎日それ関連のニュース届いていい感じにAI怖いなーって思えるのでおすすめです。)

ほんとにAIのせいで世の中変わっていっちゃいそうですよね。それなのに私はAIのことなんにも知らずに生きてていいのかと考えるようになりました。そしてそれはそれでよくない気がしてきました。

というわけで、私もこのビックウエーブに乗ってAIに入門してみることにしました。 ご縁があり、東大松尾研で勉強させていただくことになったのですが、そこで学んだ知識を私だけに留めてしまうのはもったいない!メモがてらブログも始めてみました。どうぞお付き合いください。

ひとまず、今話題のDeepLearningまで使いこなせるようになるのが目標です! がんばるぞ!おー!

ていうかまず人工知能(AI)ってなに?

そうそう。知ってるようで実はそっからよく分かってなかったんですよね。 松尾研でAIの研究をしている鈴木雅大さんことマサさんと、最近お世話になっているPARTYのAI担当の宮本さんにいろいろとお話を伺ったので、自分なりにまとめてみたいと思います。

人工知能(AI)はその名の通り、コンピューターで人間の知能を再現することを目指した技術群の総称らしいです。技術群というのは、機械学習、画像認識、意味ネットワーク、探索、音声認識、合成音声、自然言語処理だとか…ですね。

詳しいことは、まずは松尾先生の本を読むことをオススメします。私ももちろん読んだのですが、わかりやすい上にけっこう詳しいことまで書いてあるので、わかった気になれます。

なんでブームが来てるの?

実はAIブームはこれで3度目。ちなみに最近まで「人工知能」というワードはあんまり陽の目を見てなくて、このブームで復活したワードなのだそう。もともと「人間のような知能を創りたい!!」って言ってはじめてみたのはいいものの、コンピューターの性能やデータ量が足りなかったりでなんだかんだで全然実現できなくて、「ハイ、みんな解散〜!!」「ありがとうございました〜!」って感じになったらしい。

それでも多くの研究者の方々は諦めず、機械学習音声認識など分野を細分化し、地道に研究を続けていたのだそう。

で、ついに最近この機械学習の分野で革新が起きました。それがDeepLearningです。DeepLearningとは人間の脳のニューロン構造を模したアルゴリズムで(以下略)(すみません、DeepLearningに関してはまだ実際にいじってみたわけじゃないのでざっくりとしか理解してません!)

あとは単純にコンピューター性能があがったこと!そしてインターネットが発達し、さらにビックデータ時代を経て、大量のデータに簡単にアクセスできるようになったこと!そんなこんなで、当時できなかったことも今やってみると出来てしまった…ということが大いにあった模様です。

詳しい内容は松尾先生の(以下略)

AIって万能なの?

マサさんいわく、正直あんまり万能感はなく「DeepLearningがブレイクスルーなのか?!」とも言われているそうです。イメージとしては「一部の技術がすっごく強くなった」という感じです。

その一方でこれを単なる第3次ブームで終わらせてはならない…という責任感があるのだそう。なぜなら時代は少子高齢化。労働者が減っており、少人数の若者が社会の柱として支えなければいけないからです。

なので「この波乗り越えないと日本死ぬ!!」といわんばかりに強力に推し進めており、全員本気で向き合っている…… というところを含めると万能じゃないか?

ということだそうです。 とはいえ、要所要所では人間を超えた能力をもっていたりもしているので、これからに期待!!です!!

AIを使うには?

細分化されてるので、やりたいことにあわせてアルゴリズムを選ぶ必要があります! 最近では様々なライブラリやAPIが出てきて使うハードルが下がって来ているみたいです。

DeepLearningもできる機械学習ライブラリ

以下全てPython系のライブラリ。なんでPythonなのかというと、NumPyなどで行列の演算が簡単にできるからなんだそう。

  • Chainer
    • 日本のベンチャー企業がつくったPythonのライブラリ。あんまりよくわからなくても参考資料を軽く読めば使えます。パッケージ化されていて楽。新しいモデルを考えるときに。
  • Tensorflow
    • Googleがつくっただけあって手厚い。パッケージ基礎研究したいときにも使えてけっこう万能です。世の中がこれに移行中(らしい)。
  • Theano
    • 基礎研究したいときには使いやすいらしく、松尾研ではこれを使っています。研究室がつくったので、研究者にとっては使いやすい。エラーは見難い。続かないかもしれないらしい…
  • Keras
    • 2015年に誕生し、みんな一躍つかいだしたらしいのがこれ。TheanoやTensorflowにも対応しているラッパーみたいです。
機械学習
  • scikit-learn
    • データいれてサクサクっと実装できる便利なライブラリ。
さくっとAI的なものに触れてみたい
  • Microsoft Azure
  • IBM Watson
    • 知識をつめこみまくって賢くしていったのがIBM Watson。
    • 研究用ではなく大企業クライアントが使うことが多いですが、最近はIBM Bluemix上から個人でもいじれるようになりました!

というか、文系エンジニアでも使えるようになるの?

確かに他のプログラミングに比べたら必要な数学的基礎知識が多いですが、以下の分野がわかってればきっと大丈夫なのだそう。

  1. 線形代数
  2. 確率・統計
  3. 微分積分

数学むちゃむちゃ苦手だったけど、これを期にべ、勉強します…

実は2ヶ月前くらいから勉強し始めたのですが、まだまだ「あれ?分からなんだ〜〜!」となることが多く、消化吸収に時間がかかり、はじめての投稿が遅くなってしまいました。

これからは勉強しながら定期的にあげていきたいと思います。DeepLearningめざしてがんばろー!!

補足

「文系エンジニア」というワードが想定外に火種となってしまったようです。
ここでいう文系とは、高校で数Cまで習っていないという意味です。機械学習で一番大切な線形代数を学んでいないなか、これから頑張って学習していきたいなと思います