2018年5月23日水曜日

octaveでMNIST手描き数字の認識を実装する

下記のステップを実装します

MNISTデータの読み込み
Softmax関数
Cost Function
Gradient Function
学習
Accuracy確認
1. MNISTデータの読み込み
まずダウンロードしたMNISTデータを解凍して下記4つのファイルになります

gzip -d *.gz
t10k-images-idx3-ubyte
t10k-labels-idx1-ubyte
train-images-idx3-ubyte
train-labels-idx1-ubyte
MNISTデータをoctaveの行列に格納する

mnistTrain関数を作成してX, yにデータを格納する

function [X, y] = mnistTrain()
%ファイルは/tmp/MNIST_dataに保存する
imagefile = '/tmp/MNIST_data/train-images-idx3-ubyte';
labelfile = '/tmp/MNIST_data/train-labels-idx1-ubyte';

%画像ファイルを開く
fid = fopen(imagefile, 'r', 'b');
%4Byteのmagic numberをReadする
magic_number = fread(fid, 1, 'int32');
%Trainデータサンプル数 (60000)
m = fread(fid, 1, 'int32');
%画像横のピクセル数 (28)
r = fread(fid, 1, 'int32');
%画像縦のピクセル数(28)
c = fread(fid, 1, 'int32');
%[28*28 60000]Byte分をReadする
img = fread(fid, [r*c m], 'uint8');
fclose(fid);

%Matlab/octaveの読み込み順番は列→行
%imgは 784x60000のMatrix
%imgを回転させる 60000 x 784 のMatrixになる
X = img';

%行ごと(画像)回転させる
for i= 1:m
X(i,:) = (reshape(X(i,:), 28, 28)')(:);
end

%MNISTデータの60000画像の内、最初の5000はValidation用、5001からはTrain用
X = X(5001:end,:);


fid = fopen(labelfile, 'r', 'b');
magic_number = fread(fid, 1, 'int32');

%mは60000になる
m = fread(fid, 1, 'int32');

% 60000Byte分をReadする
yd = fread(fid, [m 1], 'uint8');

%ydには 数字0から9が格納させている
%Octaveは1-Baseインデックスなので、0を10に置き換える
yd(yd==0) = 10;

% ydのデータは下記のようになっている
% 9
% 7
% 0
% ...

%今度は one hot vectorに変換する
% 9の場合[ 0 0 0 0 0 0 0 0 1 0 ]
% 7の場合[ 0 0 0 0 0 0 1 0 0 0 ]
% 0の場合[ 0 0 0 0 0 0 0 0 0 1 ]

% 行ごとの開始Indexを作成する
% 0, 10, 20, 30, ... のVectorになる
index_offset = [(0:1:m-1) * 10]';

% ydの数字 + Index_offset
% 1行目の9  flat_index = 0 + 9
% 2行目の7 flat_index = 10 + 7
% 3行目の0 flat_index = 10 + 10
% flat_index は M x 1
flat_index = yd + index_offset;

%yを0で初期化する Mx10のMatrixを作成する
y = zeros(m, 10);

% M*10 x 1のVectorにreshapeする
y = reshape(y', m*10, 1);

y(flat_index) = 1;

% 10xM のMatrixにReshapeする
y = reshape(y, 10, m);

%yを回転させる Mx10になる
y = y';

%Xと同様5001からTrainデータをRead
y = y(5001:end,:);

end
OK

ここまでMNISTのTrainデータをoctaveの行列に格納する処理を作りました

octaveで確認しましょう

octave:1> [X, y] = mnistTrain();
octave:2> size(X)
ans =

55000 784

octave:3> size(y)
ans =

55000 10

octave:8> y(1:5,:)
ans =

0 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 0 0 0

%1行目は数字7になる
%2行目は数字3になる
%3行目は数字4になる
%4行目は数字6になる
%5行目は数字1になる

%1枚目の画像確認する
imshow(reshape(X(1,:), 28, 28));
%2枚目の画像確認する
imshow(reshape(X(2,:), 28, 28));
f:id:gradient-zero:20170706233931p:plain f:id:gradient-zero:20170706233925p:plain

2. Softmax関数
softmax(x)i=exp(xi)∑jexp(xj)softmax(x)i=exp⁡(xi)∑jexp⁡(xj)
function g = softmax(z)

g = exp(z) ./ sum ( exp(z), 2 );

end

2018年5月22日火曜日

過熱する“AI人材争奪戦” 「報酬以外の魅力必要」

研究者やデータサイエンティストなど、優秀なAI人材の争奪戦が過熱している。米Appleや米Googleら大手IT企業が続々とAIベンチャーを買収する中、国内でもAI(人工知能)に造詣の深い人材の獲得で各社が競争を繰り広げている。
中でも、データ分析や機械学習のさまざまなコンペに参加できる米国発のプラットフォーム「Kaggle」(カグル)で優秀な成績を収めたKaggler(カグラー)と呼ばれるデータサイエンティストたちの需要が高まっている。
エンジニア採用を強化するヤフーは、「エンジニアスペシャリストコース」で必要な経験スキルの1つに「Kaggleの単独参加でコンテストTOP10%の入賞経験」を明記している他、名刺管理サービスのSansanのR&D(研究開発)グループもKagglerの採用に積極的で、複数人のKagglerと、日本では数人しかいない「Grandmaster」(Kaggle内の称号)を2人抱えるという。
そんな中、ディー・エヌ・エーがAI研究・開発部門のデータサイエンティストの強化を図るため、業務時間中にデータ分析のコンペに参加できる「Kaggle社内ランク制度」を4月に導入した。
KaggleにはMicrosoftやGoogle(GoogleはKaggleを買収している)などの大手企業もコンペ主催者となり、多額の賞金を用意。参加者は、業務時間後や休日などのプライベートな時間を割いてコンペに参加することが通例のようだが、ディー・エヌ・エーの制度があれば業務時間内での作業が許される。「トップ3入賞5回、うち1回は単独入賞」という優秀な成績を収め、同社制度で「ランクSS」と認められれば、業務時間の全てをKaggleに充てられるという。
そこまでしても手に入れたいKagglerの魅力とは。また、同社はし烈なAI人材獲得競争をどう勝ち抜こうとしているのか。
●日本でも高まる、Kagglerの重要性
「Kagglerは会社にとって重要な存在だが、日本での知名度はあまり高くない。彼らの価値を日本でしっかり示したい」――ディー・エヌ・エー AIシステム部の山田憲晋部長(システム本部)は、こう話す。
同社は、自動運転技術を使った宅配サービス「ロボネコヤマト」や、AIを活用したタクシー配車アプリ「タクベル」の他、モバイルゲーム「逆転オセロニア」の開発・改良、プロ野球チーム「横浜DeNAベイスターズ」のチケット販売予測など、さまざまな事業でAI活用を検討。製品開発だけでなく、ディープラーニングなどの研究にも積極的に取り組んでいる。
山田部長によると、同社のAI系人材は(1)ディープラーニング系の研究者、(2)各事業の課題を発見・改善するデータサイエンティスト、の2つに大きく分かれる。AIシステム部は50人ほどの組織で、分析部隊は各事業部にも偏在している。
オートモーティブ、ヘルスケア、スポーツなど多岐にわたる事業を手掛ける中で、「一歩進んだ機械学習の活用ができ、事業への展開も含め、高い精度で予測モデルを構築したりできる人材が必要になってきた」(山田部長)
例えば、天候、対戦相手、日時などのさまざまな条件を考慮し、横浜DeNAベイスターズのチケットの販売予測モデルを機械学習を用いて構築する――などを検討している。山田部長によると、優秀なKagglerは実際に企業が直面する課題に対して、精度の高い予測モデルを作ることに優れているという。
「アカデミックな知見を持つ人が、必ずしも実用的な事業にマッチするとは限らない。Kagglerは試行錯誤しながらさまざまなコンペに挑戦してきたので、企業が抱える問題に柔軟に対応できる人が多い」(山田部長)
機械学習への知識だけでなく、実際の事業活用まで落とし込めるのがKaggle人材の強みだ。山田部長は「機械学習を使う問題に対する圧倒的な安心感があり、どれくらいの期間でどれくらいのレベルのものがアウトプットできるのかの見積もりも正確。PDCAを回すのが速く、普通のエンジニアが10時間掛かる作業を1時間で終わらせることもある」と魅力を語る。
同社はMobageを始め、モバイルゲーム事業のノウハウを長年蓄積してきたが、ゲーム事業でのデータ分析活用の在り方も変わってきたという。
●モバイルゲーム開発にもAI活用の時代
同社は2010年にデータ分析組織を立ち上げ、今のAIシステム部は約50人の体制。当時は機械学習を使わないビッグデータの分析などを行ってきた。09年に携帯電話向けプラットフォームMobage向けに提供したゲーム「怪盗ロワイヤル」が大ヒットし、プレイヤーの日々の行動ログを分析し、どうすれば長く遊んでもらえるかを試行錯誤した。おすすめゲームや友達、ニュース、広告などのレコメンドにデータ分析の手法を用い、一部機械学習も活用したという。
「15年ごろまでは機械学習の利用は全体の2割くらいだったが、ここ数年でディープラーニングが世の中に与えた影響が大きく、一気にAI活用が進んだ」(山田部長)
今はスマホ向け盤上ゲーム「逆転オセロニア」の開発にディープラーニングと強化学習を活用。AI研究者とKaggle「master」(Kaggle内の称号)のエンジニアが中心となり、AIエージェント同士を対戦させることで知見を蓄積している。
山田部長は「他社もモバイルゲームのデータ分析などをしているが、より踏み込んで機械学習まで広く取り入れている所は少ないのでは」とし、「オセロニアの場合は、ゲームの中に立ち入って、どのコマをどのタイミングで取ったか、デッキの中身、対戦相手などプレイヤーの細かいログを見ている」と話す。
しかし、優秀な人材の獲得はどうしても価格競争になりがちだ。実際、大手IT企業はこぞって高額な報酬を提示して優秀なエンジニアを採用しようとしている。サイバーエージェントも1月に、新卒入社するエンジニアを対象に、初任給制度を廃止し、「能力給」を採用すると発表した。
山田部長は「高額な報酬だけでなく、魅力的な環境作りも大切」と強調する。
●AI人材にとっての魅力的な環境とは
「研究だけやりたい人にとって、ディー・エヌ・エーはそんなに魅力的な場所じゃない」と山田部長は笑う。ゲーム、オートモーティブ、ヘルスケア、漫画アプリ、ライブ配信サービス、スポーツなど、さまざまな事業の問題に取り組め、実際に消費者が触れるサービスに関われるのが特徴で、「もともとビジネス分野に強い人材がいるので、社内のKaggle的な問題に集中でき、コンピューティングリソースも潤沢だ」と続ける。
ただし、多様なサービスや潤沢なリソースなどは競合他社も同様の環境を用意できるため、今後は社内に「Kagglerが活躍できる制度を整え、成功事例を増やしていきたい」としている。同社は12月までに10人のKagglerチームを作る考えだ。

グーグル傘下DeepMind社が「ルート検索AI」開発…人間の“脳内GPS”を解明へ

囲碁人工知能(AI)・AlphaGoでお馴染みのグーグルディープマインド、デミス・ハサビスCEOおよび、同社に所属する研究者たちが人間の脳の機能を模倣した「ルート検索AI」を開発。5月10日に、テクノロジー専門誌「ネイチャー」に発表した。


研究者らは、AlphaGoと同じようにディープラーニングと強化学習を用いて道を探すAIを開発した。同ニューラルネットワークには、哺乳類が空間を認識する際に活性化される「格子細胞」(grid cell)の特徴が取り入れられているという。格子細胞は、動物が道順を覚えるのを助ける「脳の中のGPS」とも呼ばれる。ノルウェー科学技術大学のマイブリット・モーセル、エドバルド・モーセル教授夫妻は、これを最初に発見し2014年にノーベル生理学医学賞を受賞している。

研究者は、格子細胞の特徴を持ったニューラルネットワークを強化学習に活用し、従来よりも優れたルート検索AIをつくった。学習を繰り返すと道順を探す能力が高まるだけでなく、新しく変わった地形にも適応し近道を見つけだす。また迷路ゲームでは、人間よりも優れた能力を発揮したという。

また研究者たちは、開発した道検索AIを脳機能の研究に活用。格子細胞のニューラルネットワークを除いたバージョンのAIと比較した結果、格子細胞はルート検索過程で直線距離と方位を推定するために決定的な役割を果たすことも分かった。人工知能研究は人間の脳を模倣・再現するという目的から始まったが、今回のケースでは逆にAIが人間の脳を理解するために活用されたことになる。

すでにグーグルのルート検索機能はかなりの精度を有している。世界中の主要都市部では、人間が道に迷うことをほぼほぼ解消してしまった。グーグルディープマインドが研究するルート検索AIは何らかしらの形でサービス展開するのだろうか。より精密で裏道さえも簡単に見つけてくれるAIが開発されれば、人間のモビリティの向上だけではなく、交通渋滞の解消などにもメリットを発揮しそうだ。

AI開発前に実証レポートで検討できるサービス開始

 GAUSSは5月15日、実証実験レポーティングサービスの開始を発表した。
 AI開発に着手する前に実証研究を実施し、レポートにまとめ報告する。導入決定の際には、開発・運用に至るまでサポートするとのこと。
 約1〜2ヵ月程度の短期間に、企業固有の経営課題やデータ保有状況を踏まえた人工知能(AI)活用方法を提案。プロト版アルゴリズムを開発して実証研究レポートを提供することで、企業のAI導入検討を支援する。レポート内容はAI活用提案や費用、効果試算、実現可能性など。費用は120万円〜(初回打合せで応相談)。
 また、GAUSSは自社開発した3分野のAIエンジンを応用し、AIの実証研究を短期間かつ低価格で提供している。
 予測エンジン「Galileo(ガリレオ)」は、時系列やデータ分類、ベイズ推定、強化学習などを用いたデータ解析による予測を実施。導入事例は電力事業社の電力需要予測の開発と、競馬予測AI・競輪予測AIの開発・運営。
 自然言語エンジン「Goeth(ゲーテ)」は、形態素解析やチャットボットなどを用いた自然言語解析を実施。導入事例は大手コールセンター数社と、業務効率化AIの共同開発。
 画像認識エンジン「Gogh(ゴッホ)」は、深層学習と局所特徴量によるベククトル化、教師なしデータによるクラスタリングを用いた画像解析を実施。導入事例はファッションEC販売業務の商品登録業務を実施する効率化AIの共同開発。

近道を探す神経ネットワーク

空間内で周期的に発火する嗅内皮質ニューロン(「グリッド細胞」と呼ばれる)は、脳に位置決定システムを提供すると考えられているが、哺乳類の空間ナビゲーションの際にこれらの細胞がどのような特異的演算が行っているかは、仮説の段階にとどまっている。

今回、D Kumaranたちは深層強化学習を利用して、人工エージェントに経路積分を行わせる訓練をすると、あらかじめ「グリッド細胞」様性質を人為的に組み込まなくても、そうした性質が現れ得ることを示した。

彼らは次に、その人工ネットワークに手を加えることにより、(ベクトルベースの)目的地指向ナビゲーションにおいて人間以上のレベルでその次の行動をとるにはグリッド細胞の存在が必要であることを示した。

Nature557, 7705

原著論文:

Vector-based navigation using grid-like representations in artificial agents