So-net無料ブログ作成
検索選択
人工知能(ディープラーニング) ブログトップ
- | 次の10件

torch7で小さくディープラーニング(1) [人工知能(ディープラーニング)]

まずは自力でディープラーニングをやってみます。

プログラムは以下のとおりです。

エディタなどで、打ち込んで、ファイルを保存、
torchを起動してから、dofile 'ファイル名'で実行させます。

Torch7start.png
【torch7の起動画面】

はじめに、学習用のデータを200個ほど作り、
そのあとでニューラル・ネットワークを定義、
学習用のパラメーターを設定して学習開始、
最後に学習できたか、検証します。

======================ここから


require 'nn'
dataset={}
-- ここでイレギュラーな設定しています(ここでデータを200個使うようにしています)
function dataset:size() return 200 end

for i=1,200 do
input=torch.randn(2)
input[1]=torch.random(0,10)
input[2]=torch.random(0,10)
output=torch.Tensor(2):zero()
if (input[1] > input[2]) then
output[1]=1
end
if (input[1] < input[2]) then
output[2]=1
end
dataset[i]={input,output}
end

-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())

-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)

-- 学習結果の検証
x=torch.Tensor(2)
for i=1,10 do
x[1]=torch.random(1,10)
x[2]=torch.random(1,10)
a=model:forward(x)
print("INPUT :",x[1],",",x[2])
print("ANSWER:",a[1],"|",a[2])
print("------")
end
======================ここまで

このプログラムで、数字をふたつtorch.Tensorで与えると大きな数字の方に1に近い数値を表示します。


test2kekka.png

学習用のデータセット作成をこのプログラム内で行っているため、そこにはif文がありますが、データセット作成以降は、直接ふたつの数字を比較してそれに反応するプログラムがないのが判ると思います。
人工知能モデルが、与えられたデータから(input)と(output)の関係を学習をしたのです。
このプログラムの中心部はここです。

-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())

-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)

これで人工知能モデルを作り、学習方法や学習用パラメーターを決めて学習を開始しています。

他にも、別の「入力データ2個と、出てくる答え2個のサンプル」を与えて学習させれば、それに応じた反応を返してくれます。
(望む内容によっては人工知能モデルの変更は必要になりますが)

…プログラム組んでないのに…答えが出てくる…
あれ? 俺、いらなくない? とか思いました…
(数日後そんなに簡単な事ではないと気がつくのですが…)

とはいえ、はじめてこの結果を見たときは、なんというか物凄い不気味さを感じました。
プログラムを組んでいないのに望んだ答えが出てくる…頭ではなんとか理解しようと思うのですが、自分の足下に妖怪というか、スライムが生まれた、というかそんな変な感覚に襲われました。
感情はないし、複雑な事は出来ないけど、データから答えを出す方法を学びやがった存在がいる。
これは衝撃でした。
この違和感は数日間抜けませんでした。

ぜひともこの感覚を味わって欲しいです!

いろいろな大学が公開している実験セットでは完璧過ぎて味わえない、不思議な感覚です…

次回は、このプログラムを変更してみます!


torch7と直接関係はないのですが、基本的なことがとても判りやすく解説されているのでお勧めの本です。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

  • 作者: 斎藤 康毅
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2016/09/24
  • メディア: 単行本(ソフトカバー)



人工知能もはじめます [人工知能(ディープラーニング)]

ずいぶん長いこと更新が遅れてしまいました。

この間、何をしていたかというと、今流行りの人工知能を使ってみたくてもがいていました。

しかも…最初の数カ月間はろくな成果もなく、ネットの記事を読んでもチンプンカンプンでした。

いきなりテンソルとかベクトルとか、内積とか言われたってこちとらチンプンカンプンです。
むしろ、わざとイジワルして難しく表現しているのではないか、と思ったほどです。
そうじゃなくとも、ある解説書とかでは、難しいところは端折って説明しやすいところだけ説明しているんじゃないのか?とか思いました…。
 
 やっとやさしい表現で解説しているサイトを見つけたと思ったら、結局は文字認識の実験プログラムを紹介して終わっているとか…
 あとは人工知能を使ったビジネスモデルの話ばっかりで…
 なんだこの状況は…と混乱するばっかりです。

 じゃあ、基礎から入るかと気持ちを切り替えて、解説書を手にしてみたら…
 いきなり線形代数の話をされたって判りません…
 確かに線形代数の話も大切だけど…そうじゃない、そうじゃないんだよ…
 
 まずは、どんなものなのかを感覚的に判るようにしよう、と。
 得意気に線形代数の話をする人はこのさい脇に置いといて、もう少しだけ判るようにしようと思います。

 それと、せっかくなんで、自分でも体験してみましょうよ!
 どっかの大学が公開している実験セットを動かして、「ああ、俺にはこんなの作れないよ」と内心でしょぼくれて終わらないようにしましょう。

 なので、(行列とかは高校でしか習っていない)私が、自分自身で、よく判らないながらも人工知能を作れるようになるまでを報告していこうと思います。

 目標は、「画像処理が出来る人工知能を作る」です。
IMG_0617.JPG
【この画像は雰囲気です。これを作るわけではありません】
 テキスト処理とかしません。
 あとどこかの大学が公開しているような実験セットは、よっぽどの事がない限り使いません。
 実験セットを動かしたところで、おもちゃのブロックを買ってもらったのに、そのおもちゃでかっこいい家を組み立てたのは親戚のおじさんで、「へー、こんなのも出来るんだ」で終わるのはもったいないです。
 なのでなんとか簡単なプログラム(人工知能?)を作ってみて、どんな動きをするのか、やってみたいと思います。

 また、使う人工知能フレームワークは「torch7」です。
 caffeとかchainerとかじゃありません。
 はっきりいって、日本国内ではいろいろな情報がろくに集まらない人工知能フレームワークですが、ちょっとガンバって英語で検索していくと、意外にもなんとか答えが見つかります。
 それと何でtorch7か…早稲田大学の石川研究室が白黒画像をカラー化できる人工知能を作ったのがtorch7です。それで、カラー化プログラムは物凄い複雑な処理をしていると思って見てみたら…たった数十行で動いていたんです。
 なんなのこれ? 物凄い複雑な処理をしてると思ったら、関数を呼び出してポン、みたいな感じで処理してます。このtorch7って絶対にすごいと思って、選びました…
 使ってみると、人工知能モデルの構築や変更がとても簡単で、試行錯誤を繰り返しても手間が最小限で済みます。

 ただ…MACかlinuxでないとtorch7は動きません。
 windowsに仮想環境を構築しても、学習済み人工知能モデルを使った処理は出来ますが、ちょっと複雑なディープラーニングは処理速度が遅くてすぐに限界が来ます。ここはまぁおいおいなんとかしていきましょう。

 また、環境構築に関することは基本的に触れません。
 何でかというと、とにかくあちこちに落とし穴があって、ネットの情報がろくに信用できないのです。
 人工知能フレームワークのインストール、pathの設定、CUDAの導入、ひとつふたつ解説したところであっという間に情報が古くなります。
 なので、なんとか自力でtorch7のインストールまでは行ってください。(まずはCPUだけで動けばいいので)
 悩んでこのtorch7が動くようにした経験は、必ず後で役に立ちますので!

 では、はじめます。


ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

  • 作者: 斎藤 康毅
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2016/09/24
  • メディア: 単行本(ソフトカバー)


この本は画像処理に付いて詳しく説明しています。
特にプログラムを組めるけど、人工知能フレームワークはいまいち判らないという人にお勧めします。
「青い解説書」よりも説明に使う数式は最小限、python3を使っての解説も判りやすくなっています。



nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:学問
- | 次の10件 人工知能(ディープラーニング) ブログトップ