SlideShare une entreprise Scribd logo
1  sur  204
2016/04/04 クラウド研究会 丸山不二夫
ニューラル・ネットワークと技術革新の展望
TensorFlowとCNTK
Agenda
 ニューラル・ネットワークと技術革新の展望
 クラウドとモバイルへのインパクト
 我々自身がデータをもつことの重要性
 ニューラル・ネットワーク技術の共通の基礎
 訓練と実行
 グラフ表現とモジュール構造
 パラメーター変更のアルゴリズム
 TensorFlowとCNTK
 CNTKの高速化チューニング
 TensorFlowの大規模分散化
ニューラル・ネットワークと
技術革新の展望
 クラウドとモバイルへのインパクト
 我々自身がデータをもつことの重要性
Part I
クラウドとモバイルへのインパクト
 クラウド・ビジネスの新しい市場
 新しいスタイルのモバイル・アプリ
 GCPNEXTから
 技術とビジネス --- Googleの場合
 今後の展望
ニューラル・ネットワークの
訓練と推論実行の「非対称性」
 ニューラル・ネットワークでの計算は、データ学習を行う
「訓練」と「推論実行」の大きく二つのフェーズに分かれる。
 訓練では、膨大なデータを繰り返し学習して、ニューラル・
ネットワーク内部のパラメーターを、少しづつ修正していく。
それは、大規模で時間のかかるバッチ処理になる。
 しかし、こうしていったん学習されたパラメーターを利用す
れば、推論(数値予測・クラス分類等)を実行するのは、ス
マホ上でもリアルタイムに可能なぐらい、軽い処理になる。
 ニューラル・ネットワークの訓練と実行の二つのフェーズ
の、必要とされる処理能力の大きな「非対称性」は、今日
のITの基本的なインフラであるクラウドとモバイルの双方
の今後に、大きなインパクトを与えていくだろう。
「訓練」のサービス提供
クラウド・ビジネスの新しい市場
 訓練のフェーズで必要とされる、膨大なデータ処理の能力
は、クラウド・ビジネスに、訓練のサービスを提供するとい
う、これまでになかった新しい市場を提供していくだろう。
 今回のGCPNEXTでは、商業サービス公開の発表はな
かったが、Google Cloud Machine Learningがター
ゲットとしているのは、そうした市場だ。このクラウドの新し
い市場でも、Googleは先行しているように見える。 小論
のPart IIIでも述べるように、Googleは、TensorFlow
の大規模分散化に注力している。
Google Cloud Machine Learning
GCPNEXT 2016 でのJeff Dean
新しいスタイルのモバイル・アプリ
 学習の成果が、モバイル上でも実行可能なことは、ネイ
ティブ・アプリともWebアプリともことなった第三のスタイル
のモバイル・アプリが生まれることを意味する。それは、プ
ログラムではなく、訓練済みのデータに基づいて動作する。
 既に、TensorFlowではGoogleの画像認識の
Inception相当モデルが、ネットワーク接続なしでも
Android上で動くサンプルが提供されている。これは、驚
異的なものだ。
 ここではまた、クラウドがモバイルにリアルタイムのAI
サービスを提供することも可能になる。今回公開された
Speech APIやVision APIは、そうしたものだ。当然、ク
ラウド上・モバイル上のそれらのハイブリッド・アプリが生
まれてくるだろう。
Cloud Vision API
GCPNEXT 2016 から
Cloud Vision API
GCPNEXT 2016 から
Cloud Vision API
GCPNEXT 2016 から
Cloud Vision API
GCPNEXT 2016 から
Cloud Vision API
GCPNEXT 2016 から
Cloud Vision API
GCPNEXT 2016 から
Cloud Speech API
GCPNEXT 2016 から
Use your own data to train models
GCPNEXT 2016 から
技術とビジネス
--- Googleの場合
Google内部での機械学習技術の利用は急増してい
る。ただ、それには理由がある。それは、彼らの基本
的なビジネスである検索と広告の分野で、機械学習
技術が極めて有効に利用可能だという認識が広まっ
ているからである。技術をビジネスがドライブし、ビジ
ネスを技術がドライブしている。
Google内部でのDeeo Learning技術利用の拡大
Cloud Machine Learningの発表では、
どんなデモが行われたか?
GCP NEXTでのClick Predictionデモ
よく見えないので拡大してみた
目標は、過去のクリックのデータから、
ユーザーがもっともクリックしそうな
広告・コンテンツを見つけるということ。
そのために、BigQuery上の大量の
クリック・ストリームのデータを利用して、
大規模な確率モデルを訓練して、
大規模な予測を実行する。
Click Prediction
Google RankBrain !!!
https://goo.gl/o7RQrU
他の例より規模が一桁大きい
https://goo.gl/o7RQrU
自動応答メール Smart Reply
今後の展望
新しい分散処理技術と言語理解へ
 それらをコントロールする技術は、人間の脳が、感覚・運
動器官として相対的には独立した、眼・耳・口・ ... をコン
トロールしているのに似た、新しいハードウェアの利用を
含む、ソフトウェアだけに閉じない新しい分散処理技術の
時代の扉を開いて行くだろう。
 ニューラル・ネットワークの最先端の研究は、RNN/LSTM
に移行している。そこでの中心的な課題は、Sequence
to Sequence と言われる、基本的には、言語理解に関
わる問題である。この分野でも、大きな展開が起きる可能
性がある。そうした飛躍が可能になれば、その応用分野
は広大である。
https://goo.gl/o7RQrU
Sequence to Sequence
https://goo.gl/o7RQrU
Sequence to Sequence
我々自身がデータをもつことの重要性
 機械学習の基本
 基本的なデータたち
 Human Computing
 どう、データをつくるか?
機械学習の基本は、
人間の知識を機械に移転すること
機械学習の基本を確認しよう。ただ、人間の
知識を機械に移転するためには、単にマシン
と大量のデータがあればいいというわけでは
ない。正確にラベル付けられたデータの「作
成」と「蓄積」が不可欠。それには、人間の根
気強い、組織的な取り組みが必要。
「人間には容易でも機械には難しいこと」
「機械には容易でも人間には難しいこと」
その境界は、動的に変化するのだが、いつの
時点でも、機械に提供する学習データ作りは、
前者。その段階を経なければ、機械は賢くな
らない。現実的には、それぞれに要する経済
的なコストが、現実を動かす。その費用を、誰
がどう負担するのか? 以下で、基本的な学
習用データセットを見てみよう。
http://yann.lecun.com/exdb/mnist/
MNIST 手書き数字のデータベース
60,000サンプル
CIFAR-10 10のカテゴリーの画像データ
一つのカテゴリーに6,000枚。計60,000サンプル
https://www.cs.toronto.edu/~kriz/cifar.html
Tront大学
ImageNet
http://www.image-net.org
WordNetの名詞(80,000+)に対応した画像データベース
Stanford大学
https://wordnet.princeton.edu/
Princeton大学
The Penn Treebank Project
https://www.cis.upenn.edu/~treebank/
Pennsylvania大学
https://www.ldc.upenn.edu/
The Penn Treebank Project
基本的な性格をもつオープンな
データの共有が、機械学習のイノ
ベーションをドライブしている
先の「データ作成のコスト」の問題に対する最
も有力な回答は、オープンなコミュニティ(大
学・学会を含む)が、基本的な性格をもつ学習
用データを公開し、それを皆が共有すること。
(日本は、どうだろう? 少なくとも日本語は、
日本がやるしかない。)
Human
Computing
「人間には容易でも機械には難しいこと」
 Captcha
 画像のラベル付け (with Google)
 Duolingo
ゲミフィケーションとクラウド・ソーシング
人間の自由時間の利用
 2003年に、ソリティアを遊んだ、人間の総時間は、
90億時間。
 ある人たちは、コンピュータの無駄な計算サイク
ルについて話をしているが、人間の無駄なサイク
ルについては、どうなんだろう?
 エンパイア・ステートビルを作るために、人間が
使った時間は、700万時間。
 パナマ運河を作るために、人間が使った時間は、
2000万時間。(ソリティアの一日分以下)
Carnegy Melon Univ. Luis von Ahn
Most human can pass, but current computer can not pass.
http://elie.im/blog/security/five-surprising-captcha-schemes/#.UjUKt7zqH9I
http://www.youtube.com/watch?v=tx082gDwGcM
Human Computing / Crowd Sourcing
2012年 Google TechTalk
我々が、それぞれのドメインで持つ
知識を、きちんとデータ化すること
それを機械に学習させる。量優先で質的規定
が曖昧なBig Dataではなく、優れた質をもっ
た、それぞれのドメインに固有のGood Data
を持つことが、より重要。ニッチでもいい。チャ
ンスは、AIの応用領域の数ほど、たくさん存
在している。もちろん、その前提は、基本的な
オープンなデータの存在と共有なのだが。
ニューラル・ネットワーク技術の
共通の基礎
 訓練と実行
 グラフ表現とモジュール構造
 パラメーター変更のアルゴリズム
Part II
ニューラル・ネットワーク技術の
共通の基礎
ニューラル・ネットワークの様々なフレーム
ワークが提案されている。ただ、それらの基礎
にあるのは、共通のものだ。ここでは、次の三
点で共通性を見ることにする。
 訓練の定義と実行
 グラフ表現とモジュール構造
 パラメーター変更のアルゴリズム
訓練の定義と実行
 訓練の実行 -- TensorFlowとCNTK
 訓練の定義 -- TensorFlowとCNTK
Part II ニューラル・ネットワーク技術の共通の基礎
訓練の定義と実行
ニューラル・ネットワークの学習は、基本的には、次のような
ステップからなる。
 訓練の定義
 推論を行うネットワーク・グラフの定義
 学習、すなわち、ネットワークのパラメーターの変更を行うアルゴ
リズムの定義
 訓練、すなわち、データでの繰り返し学習を行う、繰り返しの定義
 ...
 訓練の実行
訓練の実行
-- TensorFlowとCNTK
訓練の実行での、TensorFlowとCNTKのコ
マンド・シーケンスを見てみよう。ここでは、ま
だ、違いしか見えてこない。
訓練の実行例 TensorFlow
$ python –m モデル
$ python -m
tensorflow.models.image.mnist.convolutional
tensorflor-master/tensorflow/ 以下
訓練の実行例 CNTK
$ cntk configFile=cntk ファイル
$ cntk configFile=../Config/02_Convolution.cntk
CNTK/Examples/ 以下
訓練の定義
-- TensorFlowとCNTK
TensorFlowとCNTKの訓練の定義を比較してみよう。
TensorFlowはPythonで手続きをベタに記述し、
CNTKは宣言的なDomain Specific Languageを
使う。違いが目立つが、グラフの定義・最適化のアル
ゴリズムの指定・訓練の繰り返しの指定等で、基本的
な対応が見え始める。
# Create the model
x = tf.placeholder("float", [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# Define loss and optimizer
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01)
.minimize(cross_entropy)
# Train
tf.initialize_all_variables().run()
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs, y_: batch_ys})
グラフの定義
最適化の
アルゴリズム
グラフで訓練
繰り返し
https://goo.gl/MwscZO
訓練の定義例 TensorFlow
ndlMacros = "$ConfigDir$/Macros.ndl”
train = [
action = "train”
NDLNetworkBuilder = [
networkDescription = "$ConfigDir$/02_Convolution.ndl”
] < ndlは、Net Definition Language 次にリストを示す>
SGD = [
epochSize = 60000
minibatchSize = 32
learningRatesPerMB = 0.5
momentumPerMB = 0*10:0.7
maxEpochs = 15
]
reader = [
...
]
]
訓練の定義例 CNTK
グラフの定義
繰り返し
の指定
....
run = DNN // 実際に DNNという名前のグラフを構成する
ndlMnistMacros = [ .... ]
DNN = [
....
<省略: グラフの定義の一部を次ページに示す >
....
ce = CrossEntropyWithSoftmax(labels, ol )
err = ErrorPrediction(labels, ol)
# Special Nodes
FeatureNodes = (features)
LabelNodes = (labels)
CriterionNodes = (ce)
EvalNodes = (err)
OutputNodes = (ol)
]
最適化の
アルゴリズム
02_Convolution.ndl
最適化の定義 CNTK
DNN = [
....
# conv1
kW1 = 5; kH1 = 5; cMap1 = 16
hStride1 = 1; vStride1 = 1
# weight[cMap1, kW1 * kH1 * inputChannels]
# ConvReLULayer is defined in Macros.ndl
conv1_act = ConvReLULayer(featScaled, cMap1, 25,
kW1, kH1, hStride1, vStride1, 10, 1)
# pool1 ...
# conv2 ...
# pool2 ...
# DNNImageSigmoidLayer and DNNLayer are defined in Macros.ndl
h1 = DNNImageSigmoidLayer(4, 4, cMap2, h1Dim, pool2, 1)
ol = DNNLayer(h1Dim, labelDim, h1, 1)
ce = CrossEntropyWithSoftmax(labels, ol)
...
]
02_Convolution.ndl
グラフの定義 CNTK
Macros.ndlを参照している
ConvReLULayer(inp, outMap, inWCount,
kW, kH, hStride, vStride, wScale, bValue) = [
convW = LearnableParameter(outMap, inWCount, init="uniform",
initValueScale=wScale)
convB = ImageParameter(1, 1, outMap,
init="fixedValue", value=bValue, imageLayout=$imageLayout$)
conv = Convolution(convW, inp, kW, kH, outMap, hStride, vStride,
zeroPadding=false, imageLayout=$imageLayout$)
convPlusB = Plus(conv, convB);
act = RectifiedLinear(convPlusB);
]
DNNImageSigmoidLayer(inW, inH, inC, outDim, x, parmScale) = [ ... ]
DNNLayer(inDim, outDim, x, parmScale) = [
W = LearnableParameter(outDim, inDim, init="uniform",
initValueScale=parmScale)
b = LearnableParameter(outDim, 1,
init="uniform", initValueScale=parmScale)
t = Times(W, x)
z = Plus(t, b)
]
Macro.ndl
グラフの定義 CNTK
マクロを見るとネットワークの
見慣れた形が見えてくる
ニューラル・ネットワークの
グラフ表現とモジュール構造
 DNNのグラフ表現とモジュール構造
 CNNのグラフ表現とモジュール構造
 RNNモジュールの数式による表現
Part II ニューラル・ネットワーク技術の共通の基礎
丸山の次の資料を参照されたい https://goo.gl/Q0mKfy
ニューラル・ネットワークの
グラフ表現とモジュール構造
それぞれのフレームワークごとに表現のスタ
イルには違いがあるものの、重要なことは、そ
れが表現しているニューラル・ネットワークの
「グラフ」は、同一のものであるということであ
る。それは、基本的なモジュールの組み合わ
せでできている。
DNNのグラフ表現とモジュール構造
まずは、基本的な DNN (Deep Neural
Network)のグラフ表現とモジュール構造を
見ていこう
ニューラル・ネットワークの例
これでも省略
されている
784->8
DNNのグラフ
TensorFlowでは、複数のニューロンからなる一つの層は、
次のようなグラフで表現される。
行列
の積X
W
行列
の和
b
φの
適用
5つのノードがあるが、Wとbには、重みとバイアスの値が入り、
残りの3つのノードは、演算を行うノードである。この層の働きは、
φ(X・W+b) で表現される。
一つの層
積X
W
和
b
φ 積
W
和
b
φ
隠れ層の
ニューロン数:15
重み WH:784x15次元
バイアス bH:15次元
出力層の
ニューロン数:10
重み WO:15x10次元
バイアス bO:10次元
入力層 隠れ層 出力層
こっちのグラフの方が、ずっとわかりやすい!
隠れ層の
入力:784
784次元
TensorFlowのグラフ
TensorFlow
CNTK
これらのグラフは、同じものである
TensorFlow
CNTK
これらのグラフは、同じものである
TensorFlow
Torch7
これらのグラフは、ほぼ、同じものである
Torch7でのDNNモジュールの記述例
 DNN
# Hidden 1
with tf.name_scope('hidden1'):
weights = tf.Variable(
tf.truncated_normal([IMAGE_PIXELS, hidden1_units],
stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),
name='weights')
biases = tf.Variable(tf.zeros([hidden1_units]),
name='biases')
hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)
# Hidden 2
with tf.name_scope('hidden2'):
weights = tf.Variable(
tf.truncated_normal([hidden1_units, hidden2_units],
stddev=1.0 / math.sqrt(float(hidden1_units))),
name='weights')
biases = tf.Variable( tf.zeros([hidden2_units]),
name='biases')
hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
# Linear
....
....
TensorFlowでのDNNモジュールの記述例
DNNモジュールが、φ(X・W+b)の形を
していることは、簡単に確認できる。
DNN = [
hiddenDim = 200
# DNNSigmoidLayer and DNNLayer are defined in Macros.ndl
h1 = DNNSigmoidLayer(featDim, hiddenDim, featScaled, 1)
ol = DNNLayer(hiddenDim, labelDim, h1, 1)
ce = CrossEntropyWithSoftmax(labels, ol)
err = ErrorPrediction(labels, ol)
# Special Nodes
FeatureNodes = (features)
LabelNodes = (labels)
CriterionNodes = (ce)
EvalNodes = (err)
OutputNodes = (ol)
]
CNTKでのDNNモジュールの記述例
DNNSigmoidLayer, DNNLayerの
定義は、Macro.ndlの中にある。
DNNLayer(inDim, outDim, x, parmScale) = [
W = LearnableParameter(outDim, inDim,
init="uniform", initValueScale=parmScale)
b = LearnableParameter(outDim, 1,
init="uniform",initValueScale=parmScale)
t = Times(W, x)
z = Plus(t, b)
]
DNNSigmoidLayer(inDim, outDim, x, parmScale) = [
W = LearnableParameter(outDim, inDim,
init="uniform", initValueScale=parmScale)
b = LearnableParameter(outDim, 1,
init="uniform",initValueScale=parmScale)
t = Times(W, x)
z = Plus(t, b)
y = Sigmoid(z)
]
CNTKマクロでのDNNモジュールの記述例
DNNモジュールが、φ(X・W+b)の形を
していることは、簡単に確認できる。
CNNのグラフ表現とモジュール構造
現在、もっとも利用されているCNN
(Convolutional Neural Network)のグラ
フ表現とモジュール構造を見てみよう。CNN
は、どんどん多層化しているので、こうしたア
プローチは必須である。
複雑なCNNのグラフ
http://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf
“Going Deeper with Convolutions”
Google Inception
この二つを区別する!
回転する
モジュールからなるモジュール
複雑なCNNのグラフ
回転する
こ
の
組
み
合
わ
せ
モジュールからなるモジュール
複雑なCNNのグラフ
モジュールからなるモジュール
の組み合わせ
複雑なCNNのグラフ
複雑なCNNのグラフ
モジュールからなるモジュール
の組み合わせ
いまは、こんなことになっている
http://lsun.cs.princeton.edu/slides/Christian.pdf
CNTKマクロでのCNNモジュールの記述例
ConvReLULayer(inp, outMap, inWCount, kW, kH,
hStride, vStride, wScale, bValue) = [
convW = LearnableParameter(outMap, inWCount,
init="uniform", initValueScale=wScale)
convB = ImageParameter(1, 1, outMap,
init="fixedValue", value=bValue,
imageLayout=$imageLayout$)
conv = Convolution(convW, inp, kW, kH,
outMap, hStride, vStride,
zeroPadding=false,
imageLayout=$imageLayout$)
convPlusB = Plus(conv, convB);
act = RectifiedLinear(convPlusB);
]
このCNNモジュールは、
φ(Conv(X,W, ...)+b)の
形をしている。
次回マルレク予告
Convolutional Network
入門講座
日時: 5月13日 19:00~
場所: TIS 西新宿
定員: 200名
Convolutional Networkは、現在のニューラル・ネットワー
ク技術の中心的な技術で、また、もっとも成功した技術でもあ
ります。講演では、ニューラル・ネットワークを学び始めた人を
対象に、CNNの基本をわかりやすく解説します。
RNNモジュールの数式による表現
現在、もっとも活発に研究されている RNN
(Recurrent Neural Network)のモジュー
ル構造を見てみよう。ただし、そのグラフ表現
は複雑であり、モジュールの数式による表現
を併用したほうが、見通しは良くなる。
少し複雑なRNNのグラフの例(これは、LSTMのセ
ル) σ(sigmoidのこと), tanh は、活性化関数
次の式をグラフで
追ってみるといい。
Chris Olah "Understanding LSTM Networks"
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
これは、CNTKの
サンプルだが、グ
ラフだけでは、全
容を把握するのは
難しい。
ニューラル・ネットワークの
パラメーター変更のアルゴリズム
 Gradient Descent
 Stochastic Gradient Descentと
mini-batch
 Back Propagation
 Automatic Differentiation
Part II ニューラル・ネットワーク技術の共通の基礎
Gradient Descent
ここでは、パラメータ変更の基本的なアルゴリ
ズムであるGradient Descentの基本を確
認する。まずは、線形回帰の問題で考えよう。
Gradient Descentの基本
損失関数を定めて、誤差を最小にするパラメータを求める
 次の図で、サンプル中のi 番目の点を (x(i), y(i))とすれ
ば、y=ax+b上の点と点 (x(i), y(i)) との垂直方向の誤
差は、 (ax(i)+b) – y(i) となる。
 誤差は、正負の値をとるので、単純に、誤差の平均を取っ
ても、打ち消しあって、全体としての誤差の大きさはわか
らなくなる。
 そこで、誤差の二乗をとって、その平均を最小にすること
を考える。
 a, b の関数である、この誤差の二乗の平均を、損失関数
とすればいい。
線形回帰の場合
誤差
誤差
誤差
誤差
データの各点と、y=ax+b との誤差が、
もっとも小さくなるように、a,b の値を修正する。
(x(i), y(i))
(ax(i)+b) – y(i)
( ax(i)+b), y(i) )
誤差の二乗をLoss関数にする
こうした形の損失関数を、 “quadratic cost” という
仮説:
パラメーター: a, b
損失関数:
目標:
問題の整理
y(x) = ax + b
a, b y
a, b
a, b
損失関数 J(a, b)は、a,b についての関数で、
この例では、次のような形をしている
a b
簡単にするために、二次元のグラフで考え
よう。ある点から始めて、その点から極小
点に近ずくためには、どうすればいいか?
二つの場合がある。
その点が極小点の右側にある場合には、
その点のx座標を少し減らせばいい。
その点が極小点の左側にある場合には、
その点のx座標を少し増やせばいい。
その点が、極小点の右にあるか左にある
かは、その点での接戦の傾きが、正である
か負であるかでわかる。
よって、α を正の数値とすれば、次の式が、
より近づいた点の位置を与える。
直感的な説明
損失関数を、パラメーターで微分している
どう、重みとバイアスを修正するのか?
もう少し、一般的に、Gradient Descent をまとめてみよう。
損失関数をCとするとき、次の式に従って、重みWkと
バイアスbl を変更すればいい。
損失関数が、 ここで見た、quadratic costの形をしていない
場合(例えば、 Cross Entropyの場合)でも、この考え方は、
変わらない。
ηは学習率
コスト関数がQuadratic Costの時の
勾配を求めてみる (線形回帰)
だとして、1項だけの
場合の微分を考える
j j
j
この式を、そのまま用いると、パラメータ更新の、基本的なアルゴリズムは、
次のようになる。この操作を、値が収束するまで何度も繰り返す。
mは、全データの数である。
二項分類のLogistic回帰の場合
コスト関数 (Log Likelihood)
Logitic回帰の微分も、線形回帰の場合のQuadratic Cost
の微分と同じ形になる!計算は省略したが、次の文献を参照
されたい。“CS229 Lecture notes”
http://cs229.stanford.edu/notes/cs229-notes1.pdf
NDLNetworkBuilder = [
run = ndlLR
ndlLR = [
....
# parameters to learn
B = Parameter(LDim, 1)
W = Parameter(LDim, SDim)
# operations
t = Times(W, features)
z = Plus(t, B)
s = Sigmoid(z)
LR = Logistic(labels, s)
EP = SquareError(labels, s)
# root nodes
FeatureNodes = (features)
LabelNodes = (labels)
CriteriaNodes = (LR)
EvalNodes = (EP)
OutputNodes = (s)
]
]
Logistic(label, s) =
-sum(labels * log(s) + (1 - labels) * log(1 - s) )
CNTKでの
Logistic回帰の
ネットワーク定義例
Stochastic Gradient Descent
ここでは、まず、訓練実行の三つのスタイル、
Batch, SDG, mini-Batch の違いを見る。
実際の応用では、mini-Batchを用いるのが
一般的である。最後に、mini-Batchも、その
確率論的性格から、SDGと呼ばれることを述
べる。
変数の修正にどのくらいの時間がかかるか?
前向きの推論と比べて、約3倍の時間がかかる。
Batch
・・・・・
全てのデータ
先のパラメータ更新のアルゴリズムを、そのまま実装したもの。
すべてのデータについて前向き推論した後で、一つの更新が
行われる
データの数が大きくなると、計算量とメモリー消費が巨大になり、現実的でない。
Stochastic Gradient Descent(SDG)
・・・・・
こういうやり方もある。ひとつのデータについて前向き推論した後で、
一つのパラメータ更新を行う。これを、SDGという。
一つのデータのみで全てのパラメータをいじるので、収束性にやや問題がある。
Mini-Batch
・・・・・
先に見たBatchとSDGを組み合わせたスタイル。一定数のかたまりの
データで推論を行った後、それに基づいてパラメータを変更する。
今の訓練の基本的スタイルである。
ミニバッチ ミニバッチ ミニバッチ ミニバッチ
Batch
キレイに収束
しているが、計
算量が巨大
一回のパラメ
ータ変更のた
めに全データ
を読み込む。
推論の結果を
蓄えるための
領域も巨大に
なる
Stochastic Gradient Descent
迷走気味
一回のパラメ
ータ変更のた
めに、一個だ
けデータを読
み込む。
Mini-Batch
10個のデータを読み込んで、
その結果で、パラメータを変更
することを繰り返すプログラム
SDGの現在の用法
 現在のMLの文脈では、SDGは、一個のデータにつき一
回全データの更新を行う前述のSDGではなく、mini-
batchの処理を行う訓練のスタイルをSDGと呼ぶことが
ある。下のCNTKでのSDGの定義を見て欲しい。この時
は、SDGとはmini-batchのことである。
 SDGのStochasticというのは、全体のデータから少数
のデータをサンプリングして、確率的に推定をおこなうとい
うこと。モンテカルロ法と同様のアプローチである。
Back Propagation
前向きの推論に対して、パラメータの変更は、
勾配(Gradient)を用いて、後ろ向きに行わ
れる。そのプロセスをまとめてみよう。
F1(X0 , W1)
Fi(Xi-1 , Wi)
Fn(Xn-1 , Wn)Wn
Wi
W1
X0 (入力)
n層のネットワークの
前向きの推論。
推論の結果を X とし
よう。
簡単にするために、
バイアスの項 bi は
省略している。
Xi-1
Xi
X
省略
前向きの推論
F1(X0 , W1)
Fi(Xi-1 , Wi)
Fn(Xn-1 , Wn)Wn
Wi
W1
X0 (入力) Y (期待される出力)
Cost
C(X,Y, ...)
前向きの推論の結果
Xは、Cost関数(Loss
関数・損失関数)で、
期待される出力Yと比
較される。
その結果をCとしよう。
X
Xi
Xi-1
省略
Cost関数
F1(X0 , W1)
Fi(Xi-1 , Wi)
Fn(Xn-1 , Wn)dC/dWn
Cost
C(X,Y, ...)
各層の出力Xi につい
て、Cに対する勾配
dC/dXiが計算される。
同様に、各層の重み
Wi について、Cに対す
る勾配dC/dWi が計算
される。この値に基づい
て重みは更新される。
dC/dWi
dC/dW1
dC/dX
dC/dXi
dC/dXi-1
X
Xi
Xi-1
省略
Back
propagation
/Gradient
F1(X0 , W1)
Fi(Xi-1 , Wi)
Fn(Xn-1 , Wn)dC/dWn
Cost
C(X,Y, ...)
Xi = Fi(Xi-1,Wi) なので、
dC/dXi-1
= dC/dXi ・ dXi/dXi-1
= dC/dXi ・ dFi(Xi-1,Wi)/dXi-1
dC/dWi
= dC/dXi ・ dXi/dWi
= dC/dXi ・ dFi(Xi-1,Wi)/dWi
dC/dWi
dC/dW1
dC/dX
dC/dXi
dC/dXi-1
省略
Chain Rule
[Appendix]
Automatic Differentiation
Back Propagationは、Reverse Automatic
Differentiation の応用である。それは記号処理に
よる微分でも、数値計算による微分でもない。
“Calculus on Computational Graphs:
Backpropagation”
http://colah.github.io/posts/2015-08-Backprop/
“Automatic Differentiation”
https://en.wikipedia.org/wiki/Automatic_differentiati
on
次のような計算グラフを考えよう。
矢印にそって、下から上に計算が進む。
今、a=2, b=1 という値が入ったとしよう。
この時、各ノードでの計算は、次のようになる。
この時、一つ上のノードを一つ下のノードで
偏微分すると各ノードでの計算は、次のようになる。
∂e/∂d=cで
c=3だから
∂e/∂c=dで
d=2だから
このように、直接隣り合った項の偏微分は簡単である。
それでは、離れた項の偏微分はどうなるだろうか?
∂e/∂a を考えてみよう
aが1だけ変化した時、cは1だけ変化する。
cが1だけ変化した時、eは1だけ変化する。
だから、
aが1だけ変化した時、eは1*2だけ
変化する。
だから、 ∂e/∂a = 2
まあ、式で書けば、
∂e/∂a= ∂e/∂c ・ ∂c/∂a
= 2*1 =2 ということなのだが
このように、直接隣り合った項の偏微分は簡単である。
それでは、離れた項の偏微分はどうなるだろうか?
今度は、∂e/∂b を考えてみよう
bの変化がeに与える道は、二つある。
先と同じように考えて、aの一つの変化は、
緑の経路で 1*2
青の経路で 1*3 の影響を与える。
だから、 ∂e/∂b = 1*2 + 1*3 = 5
まあ、式で書けば、
∂e/∂a= ∂(c*d)/∂b = c*∂d/∂b + ∂c/∂b*d
= 3*1+ 1*2 =5 ということなのだが
今、ノードXからノードYに三つの道 α, β, γ が、
ノードYからノードZに三つの道 δ, ε, ζ があったとしよう。
XからZには、3*3=9通りの道がある。それらの道を、αδ
のように積の形で表せば、ZをXで偏微分したものは、先に
見たように、可能な全ての道の寄与分を足し合わせたもの
である。
この形の方が見やすい。
これは、元の例だが、これで Forward-Modeと
Reverse-Modeの微分を考えてみよう。
Forward-Mode Differentiation
(これは、入力 bについての場合)
Forward-Mode Differentiation
では、一つの特定の入力について、
全てのノードが受ける影響が計算
される。
入力パラメータの数だけ、
計算が必要。計算は
膨大になる。
Reverse-Mode Differentiation
Reverse-Mode Differentiation
では、一つの出力について、全ての
ノードが与える影響の計算は、
一回で済む。
隣り合ったノードの微分
(茶色)を計算しておけば
一つ経路上で掛け算
をし、全経路分
を足せばいい。
Reverse-Mode Differentiationは、
Back Propagationの計算法
TensorFlowとCNTK
 CNTKの高速化チューニング
 TensorFlowの大規模分散化
Part III
CNTKは、TensorFlowより
ずっと早い!
CNTKの高速化チューニング
 1-bit Quantaized SGD
 ループ検出
 前向き推論の効率化
 勾配計算の効率化
 メモリー共有
Part III TensorFlowとCNTK
1-bit Quantaized SGD
分散学習にとってのボトルネックは、通信コストである。
勾配を、1-bitまでに量子化することで、ノード間の通
信に必要なデータの量を減らす。
1-bit Quantaized SGD
 モデルのパラメーターや出力を量子化するよりも、勾配を
量子化する方が、はるかに安全である。(勾配の値は小さ
く、いずれにしても、ノイズが多い。)
 次のミニバッチに、切り捨てられた量子化の残りの部分を
持ち越すことは重要である。
 更に、一つの勾配を処理している間に、double-
bufferingを行う隠れた通信で、一つの勾配を送る。
 勾配の同期に、O(1) 通信スケジューラーを使う。
 できるだけ早く、それぞれのGPUをフル活用するために、
GPUの処理サイズに合わせてミニバッチのサイズを大きく
する。
パラメーター変更のアルゴリズム
勾配:損失関数をパラ
メーターで微分したもの
実際の変更分は、勾配に
アルファ(学習率)を掛けた
ものである。
勾配の役割 学習率の影響
勾配>0の時
パラメーター
を減らす
勾配<0の時
パラメーター
を増やす
アルファが
小さい時
アルファが
大きい時
ループ検出とシーケンス長のチェック
(RNNの場合)
ネットワークのループを検出するアルゴリズム
を開発
ループ検出とシーケンス長のチェック
(RNNの場合)
 ネットワークのループを検出する賢いアルゴリズムを開発
したので、次のようなことが可能となった。
 任意のCNから、ループを見つける。
 すべてのミニバッチの計算で、ループ内のノードを除外す
る。
 複数のシーケンスを長さごとにグループ分けする。同じ長
さのシーケンスのバッチのみをサポートするツールより、
収束の性質がいい。
前向き推論の効率化
複数のノードを評価する必要がある時、重複した計算
を少なくするために、ノードにタイムスタンプをつける。
複数のノードを評価する必要がある時、重複した計算を削減するために
タイムスタンプを追加する
複数のノードを評価する必要がある時、重複した計算を削減するために
タイムスタンプを追加する
ノードに余分な
計算をさせない
複数のノードを評価する必要がある時、重複した計算を削減するために
タイムスタンプを追加する
ノードに余分な
計算をさせない
勾配計算の効率化
 勾配計算は、すべてのノードにとって必要なわけではない。
 データノードに、patameterUpdateRequired=false
と設定して、これらのノードは、needGradient=falseで
あることを示す。
 深さ優先の探索で、このフラグをグラフの上の方に伝播さ
せる。プログラムは、次のリスト。
 needGradient=true の場合のみ、勾配を計算する。
深さ優先でDAG(Directed Acyclic Graph)のノードを
全て巡回して、フラグを立てる
Leafノードでは、
勾配計算は、必要
ない
Memory Sharing
 ミニバッチを通じて、同じメモリーを使う。それぞれのミニ
バッチのたびに、メモリーを消したり再配置しない。
 可能な場合には、計算ノードでメモリーを共有する。
 実行プランを分析して、可能ならば、他のノードないしは計算で再
利用されるように、メモリーをプールに解放する。
 例えば、あるノードが、子のノードの勾配をすべて計算しおえたな
ら、そのノードが持っている行列は、すべて、解放できる。
 大部分の場合、訓練では、メモリーを1/3から1/2削減できる。
 勾配計算が必要でなければ、もっと、多くのメモリーを削減できる。
メモリー共有なしだと、各ノードは、メモリーを持ち続ける。
メモリー共有ありだと、各ノードは、勾配計算の一ステップが終わると、
次々にメモリーを解放してゆく
メモリー共有なしだと、各ノードは、メモリーを持ち続ける。
ミニバッチのあいだ、Weightのメモリーは固定され、繰り返し利用される。
それ以外のメモリーは、演算が終わるたびに解放され、再利用される。
TensorFlowの大規模分散化
 NIPS 2015 スライドから
 White Paper から
 GitHubから
 分散TensorFlow 用語のまとめ
Part III TensorFlowとCNTK
2016/02/26 公開
Distributed TensorFlow
一つのデバイスでのパフォーマンスは重要です。 ... しかし、最も
大きなパフォーマンスの改良は、モデル・パラレルとデータ・パラレル
を備えた、大規模分散システムによってもたらされます。
Google TensorFlowの
基本的な考え方
一回の実験に必要な時間と研究の生産性
 数分あるいは数時間単位
インタラクティブな研究。すぐに満足が得られる。
 1〜4日
耐えられる。インタラクティブではなくなるが、代わりに複
数の実験を並行して走らせることができる。
 1~4週
高い価値のある研究のみ。進行は止まる。
 1ヶ月以上
やろうとも思わない。
TensorFlowの分散処理
NIPS 2015 スライドから
NIPS 2015のスライドから、TensorFlowの
分散処理の特徴を見ておこう。
https://media.nips.cc/Conferences/2015/tutorialslides/
Jeff-Oriol-NIPS-Tutorial-2015.pdf
モデル・パラレル
 訓練時間を減らす最良の方法:ステップ時間を減らす。
 たくさんのモデルに、モデル固有の並行性がある。
 問題は、通信がそれを妨げないように、仕事を分散させる
ことである。
 CNNにみられる、局所的な関連性
 AlexNetが、その例だが、タワー同士は、ほとんど、あるいはまっ
たく、関連を持たない。
 モデルの特定の部分は、あるサンプルでしか動いていない。
GPU 1
GPU 2
学習された
Kernel
GPU 1
GPU 2
AlexNet
http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
モデル・パラレルを開発するには
 単一コア: 命令の並列化(SIMD)。とても自由にできる。
 コアをまたぐ: スレッドの並列化。ソケットをまたがなければ、
ほとんど自由にできる、ソケットをまたぐ場合には、ソケット
間の帯域が問題になる。(IntelのQPI)
 デバイスをまたぐ: GPUではPCIeの帯域に、制限されるこ
とがよくある。
 マシンをまたぐ: ネットワークの帯域・遅延に制限される。:
モデル・パラレル
Model Parallelism
モデル・パラレル
Model Parallelism
モデル・パラレル
モデルをマシンをまたいで分割する
モデル・パラレル
モデルをマシンをまたいで分割する
ネットワーク・トラフィックを
最小にする。
もっとも密に結合した領域
は、同じパーティション上に
ある。
データ・パラレル
 同時に、異なるデータ・サンプルを処理するように、複数
のモデルのレプリカを利用する。
 モデルの状態(パラメーター)の更新は、共有パラメーター・サー
バー上で、全て共同して行う。
 スピードアップは、モデルの種類に大きく依存する。
 密なモデルでは、50のレプリカで、10から40倍のスピードアップ
 疎なモデルでは、もっと多くのレプリカをサポートする。1000台も
のレプリカを利用できる。
データ・パラレル
データ・パラレル
データ・パラレル
データ・パラレル
データ・パラレル
データ・パラレル
データ・パラレルの選択
 同期的に可能か?
 N個のレプリカは、バッチ・サイズをN倍大きくすることに等しい。
 利点:勾配の計算は、常に新しい
 弱点:一つのマシンが落ちた場合、リカバリーが必要なので、耐
障害性に問題がある
 非同期に可能か?
 利点:一つのモデル・レプリカが落ちても、それが他のレプリカを
ブロックすることはないので、相対的には、耐障害性は高い
 弱点:勾配が新しいとは限らないということは、その勾配が、効果
的なものではないということ
 モデルの計算時間が、ネットワーク上でのパラメーターの
send/receiveに要する時間より大きくなるようにする
データ・パラレルの成功
 Googleの問題(非常に大規模なデータセット、大規模な
モデル)の多くにとって、データ・パラレルは、実際に重要
である
 RankBrain は、500のレプリカを使っている
 ImageNet Inception は、訓練に 50個のGPUを
使って、 40倍のスピードアップ
 SmartReply は、それぞれ複数のGPUを持つ、16の
レプリカを使う
 最新の学習機械 “One Billion Word” のベンチマー
クモデルは、32のGPU上で、データ・パラレルとモデル・
パラレルの両方を使っている
TensorFlowの分散処理
White Paperから
分散TensorFlowの実装は、今年公開された
のだが、その仕様については、昨年の
TensorFlowの公開時に発表されたWhite
Paperに、既に詳しく述べられていた。
White Paperの記述を振り返ろう。
http://download.tensorflow.org/paper/whitepaper2015.pdf
丸山訳 https://goo.gl/z6pQV8
デバイス
デバイスの名前
 デバイスの名前は、デバイスの型(CPU/GPU)とワーカー
の中でのデバイスのインデックスを含む。
 分散設定では、ワーカーのジョブとタスクを指定する。(プ
ロセスに対してデバイスがローカルな場合には、
localhostが用いられる)
 デバイス名の例は、次のようになる。
"/job:localhost/device:cpu:0"
"/job:worker/task:17/device:gpu:3"
複数デバイスでの実行の課題
 システムが複数デバイスの場合、主に二つほど厄介なこ
とがある。
 ノードの配置:一つは、グラフ上のそれぞれのノードにつ
いてどのデバイスを実行配置につかさせるかを決定する
ことである。(ノードとデバイスの対応付け)。
 デバイス間通信:もう一つは、その後で、この配置決定
によって導かれるデバイスの境界をまたいで要求される
データ通信を管理することである。
ノードの配置
 配置アルゴリズムは、最初に、そのグラフ実行のシミレー
ションを走らせる。このシミレーションは、グラフ中のそれ
ぞれのノードについて、 greedy heuristics を使って一
つのデバイスを選択して終わる。このシミレーションで生
成された、ノードのデバイスへの配置は、実際の実行での
配置でも利用される。
 TensorFlowのクライアントは、ノードについて、どのデバ
イスが実行可能かについての部分的な制約条件を与える
ことで、デバイス上のノードの配置をコントロールできる。
例えば、”このノードは、GPUタイプのデバイス上にのみ置
くこと” とか “このノードは、 /job:worker/task:17 内
の任意のデバイス上に置くことができる” とか “このノード
は、variable13 という名前のノードと同じマシン上に置く
こと” 等々。
デバイス間通信
 いったんノードの配置が計算されると、グラフはデバイス
ごとに部分グラフの集合に分割される。xからyへの全て
のデバイスをまたぐエッジは削除され、xからxの部分グラ
フ内の新しいSendノードへのエッジに、また、対応する
Receiveノードからyの部分グラフ内のyへのエッジに置き
換えられる。このグラフの変形については、次の図を見て
ほしい。
Send/Receive ノードの挿入
分散実行
 グラフの分散実行は、複数のデバイスでの実行に、とても
よく似ている。デバイスの配置後に、デバイスごとに部分
グラフが生成される。ワーカープロセスをまたいで通信す
るSend/Receiveノードのペアは、マシン境界をまたいで
データを移動するのに、TCPまたはRDMAといったリモー
ト通信のメカニズムを利用する。
データ・パラレルな訓練
 SGDをスピードアップする最も単純なテクニックは、ミニ
バッチ要素間をまたぐミニバッチの勾配計算をパラレル化
することである。例えば、1000要素のサイズのミニバッチ
を使っていたとすると、モデルの10個のレプリカを使って、
その各々に100要素の勾配を計算させることができる。そ
の後、あたかも、1000要素のサイズのバッチを持つシー
ケンシャルなSDGアルゴリズムの実行のように正確に振
る舞うために勾配を結合して、パラメーターを同期して更
新をかける。この場合では、TensorFlowのグラフは、単
純に、グラフの一部がたくさんのレプリカを持つだけである。
それが、大量のモデル計算を行う。この大規模なグラフの
訓練用のループ全体をクライアントの単一のスレッドがド
ライブしている。図7の上の図が、これを図示している。
同期型と非同期型の
データ・パラレルな訓練
モデル・パラレルな訓練
 モデル・パラレルな訓練では、モデルの異なった部分の計
算が、サンプルの同じバッチのために、異なる計算デバイ
ス上で同時に行われる。これも、容易にTensorFlowで表
現できる。図8は、シーケンスからシーケンスの学習に使
われるリカレントでディープなLSTMモデル([47])が、三
つの異なるデバイス上でパラレルに実行される様子を示
している。
モデル・パラレルな訓練
モデル計算のパイプラインのための
並行ステップ
 ディープ・ニューラル・ネットワークの訓練で、もっと性能を
引き出すためによく使われるもう一つの別の手法は、同じ
デバイス内で、モデルの計算をパイプライン化することで
ある。同じデバイスのセットの内部で、複数の少数の並行
ステップを走らせる。図9にその様子を示す。これは、どこ
か非同期のデータ・パラレル処理に似ている。異なったデ
バイス上に計算グラフのレプリカを作るのではなく、同じデ
バイス上でパラレル計算が行われることを除いては。この
アプローチは、サンプルの単一のバッチの計算では、この
単一のステップの間に、すべてのデバイスをすべての時
間完全に使い切ることができない場合、「タイルの隙間を
埋める」ことを可能にする。
Concurrent steps
TensorFlowの分散処理
GitHubから
今年の分散TensorFlowの実装の公開時に、添付さ
れたドキュメントを紹介する。分散TensorFlowプログ
ラミングの具体的なイメージがわくと思う。
https://github.com/tensorflow/tensorflow/blob/master/
tensorflow/g3doc/how_tos/distributed/index.md
TensorFlow Server GrpcServer
# Start a TensorFlow server as a single-process "cluster".
$ python
>>> import tensorflow as tf
>>> c = tf.constant("Hello, distributed TensorFlow!")
>>> server = tf.GrpcServer.create_local_server()
>>> sess = tf.Session(server.target)
>>> sess.run(c)
'Hello, distributed TensorFlow!’
tf.GrpcServer.create_local_server() メソッドは、単一プロセスのク
ラスターを生成する。もっと現実的な分散クラスターを作るためには、
TensorFlowクラスターのメンバーを定義するtf.ServerDef を渡して
tf.GrpcServer を作る。こうして、それぞれが同じクラスター定義を持
つ複数のプロセスを走らせる。
ClusterDef クラスターを定義する
tf.make_cluster_def(
{"local": ["localhost:2222", "localhost:2223"]})
/job:local/task:0 /job:local/task:1
tf.make_cluster_def(
{“worker”: [“worker0:2222”, “worker1:2222”,"worker2:2222"],
"ps": ["ps0:2222", "ps1:2222"]})
/job:worker/task:0
/job:worker/task:1
/job:worker/task:2
/job:ps/task:0
/job:ps/task:1
job名: [ネットワーク名, ....]
ps: parameter server
# In task 0:
server_def = tf.ServerDef(
cluster=tf.make_cluster_def({
"local": ["localhost:2222", "localhost:2223"]}),
job_name="local” , task_index=0)
server = tf.GrpcServer(server_def)
# In task 0:
server_def = tf.ServerDef(
cluster=tf.make_cluster_def({
"local": ["localhost:2222", "localhost:2223"]}),
job_name="local” , task_index=1)
server = tf.GrpcServer(server_def)
クラスターで、localhost:2222 と localhost:2223上で、
二つのサーバーが走る。
同じクラスター定義
ClusterDef の使い方
with tf.device("/job:ps/task:0"):
weights_1 = tf.Variable(...)
biases_1 = tf.Variable(...)
with tf.device("/job:ps/task:1"):
weights_2 = tf.Variable(...)
biases_2 = tf.Variable(...)
with tf.device("/job:worker/task:7"):
input, labels = ...
layer_1 = tf.nn.relu(tf.matmul(input, weights_1) + biases_1)
logits = tf.nn.relu(tf.matmul(layer_1, weights_2) + biases_2)
# ...
train_op = ...
with tf.Session("grpc://worker7:2222") as sess:
for _ in range(10000):
sess.run(train_op)
モデルの中で分散したデバイスを指定する
二台のparameterサーバー
訓練を実行するサーバー
worker7で
訓練を実行
訓練のレプリカを作る
 よく使われる訓練の設定(データ・パラレル)では、同じモ
デルを訓練するワーカーのジョブに、たくさんのタスクが含
まれている。この設定では、一つ(あるいは複数)の
parameter serverのジョブのタスクが保持する、共有
パラメータを利用する。 それぞれのタスクは、典型的には、
異なるマシンで走るだろう。
 こうした構造を指定するやり方が、TensorFlowにはたく
さんあって、我々は、モデルのレプリカを指定するのを簡
単にするライブラリーを構築中である。
 可能なアプローチには、次のようなものがある。
非同期型の訓練
 一つのパラメータの集合を含む、単一のグラフを構築する。
(tf.Variable ノードは、パラメータ・サーバー /job:psに
割り当てられる。) この「モデル」の複数のコピーが、ワー
カー /job:worker 内の異なったタスクに割り当てられる。
 このモデルのそれぞれのコピーは、異なったtrain_op を
持つことができる。そして、それぞれのワーカー i で、一
つ以上のクライアントのスレッドが、
sess.run(train_ops[i]) を呼び出すことができる。
 これは、非同期型の訓練の実装である。このアプローチ
は、そのターゲットがクラスター内のワーカーの一つであ
るような、単一のtf.Sessionを利用する。
同期型の訓練
 ノードの配置は先と同じだが、同期型の訓練の実装では、
すべてのワーカーからの勾配は、平均化される。このタイ
プのレプリカの例については、 CIFAR-10 multi-GPU
trainer を参照のこと。
 例えば、300要素のサイズのミニバッチを使っていたとす
ると、モデルの3個のレプリカを使って、その各々に100要
素の勾配を計算させることができる。その後、あたかも、
300要素のサイズのバッチを持つシーケンシャルなSDG
アルゴリズムの実行のように正確に振る舞うために、勾配
を結合して、パラメーターを同期して更新をかける。
3
3
m+1
2
3
2m+1
m m m
A B C
A
B
Cミニバッチのデータを
3分割して3台で処理
3台のマシンでの勾配計算 データと式の分割
3m
データの分割 式の分割
3
3
3
A B C
同期型のデータ・パラレル
3台のレプリカ・モデルでの勾配計算の分割
ミニバッチのデータを3分割
して、同じモデルのレプリカ
を持つ3台で処理。
パラメータ・サーバーが、
その結果を足し合わせて、
パラメータを更新する。
分散型訓練
 分散型訓練(“distributed trainer”) アプローチで
は、ワーカー毎に一つのグラフをもたせ、複数のグラフを
利用する。ワーカー毎のそれぞれのグラフは、次の二つを
含んでいる。パラメータの集合が一つ(/job:psに割り当
てられる)、あと一つは、モデルのコピーが一つ(特定の
/job:worker/task/i に割り当てられる)である。
 異なったグラフ間で変数を共有するために、コンテナーの
メカニズムが利用される。すなわち、それぞれの変数が構
築される時、グラフのそれぞれのコピーで同じ値を持つ、
オプショナルなコンテナーの引数が指定される。 大きなモ
デルでは、全体的なグラフはより小さいので、この方法は、
より効率的に機能する。
分散型訓練
 このアプローチは、複数の tf.Session オブジェクトを利
用する。ワーカー毎に、一つのプロセスがあって、それぞ
れのターゲットは、異なるワーカーのアドレスである。
 tf.Session オブジェクトは、すべて単一のPythonクライ
アントで生成することができる。あるいは、訓練の負荷を
もっとうまく分散するために、複数のPythonクライアントを
利用することもできる。
[Appendix]
分散TensorFlow 用語のまとめ
Client
 クライアントは、典型的には、TensorFlowのグラフを構
築し、クラスターと相互作用するために、
`tensorflow::Session`を構成するプログラムであ
る。クライアントは、典型的には、 PythonかC++で書か
れている。単一のクライアント・プロセスは、複数の
TensorFlowサーバーと直接に相互作用することが出来
る(先の「訓練のレプリカを作る」を参照のこと)。そして、
単一のサーバーは、複数のクライアントにサービスを提供
することが出来る。
Cluster
 TensorFlowのクラスターは、名前が付けられたジョブの
集合に分割された、一つ以上のTensorFlowサーバーか
ら構成される。 名前が付けられたジョブは、今度は、タス
クのリストで構成される。クラスターは、典型的には、たくさ
んのマシンをパラレルに走らせる、ニューラル・ネットワー
クの訓練のような、特定の高レベルの目的のために利用
される。
Job
 ジョブは、典型的には、共通の目的にサービスを提供する、
タスクのリストから構成される。例えば、ps (parameter
server の略)と名付けられたジョブは、典型的には、変数
を格納し更新するノードをホストとして含んでいる。一方、
worker と名付けられたジョブは、典型的には、計算中心
の状態を持たないノードをホストとして含んでいる。ジョブ
の中のタスクは、典型的には、異なったマシン上で走る。
Master service
 マスター・サービスは、分散したデバイスの集合にリモート
アクセスを提供するRPCサービスである。このマスター・
サービスが、 tensorflow::Session インターフェースを
実装する。 そして、一つ以上のワーカー・サービスをまた
いだ仕事の協調に、責任を持つ。
Task
 タスクは、典型的には、単一のTensorFlowサーバー・プ
ロセスに対応する。タスクは、特定のジョブに属し、ジョブ
のタスクのリストの中で、特定のインデックスを持っている。
TensorFlow server
 TensorFlowサーバーは、 tf.GrpcServer インスタンス
を走らせているプロセスである。それは、クラスターのメン
バーで、「マスター・サービス」と「ワーカー・サービス」を外
部に提供する。
Worker service
 ワーカー・サービスは、そのローカルなデバイスを利用して、
TensorFlowグラフの一部分を実行する、RPCサービスで
ある。ワーカー・サービスは、worker_service.proto を
実装している。
次回マルレク予告
Convolutional Network
入門講座
日時: 5月13日 19:00~
場所: TIS 西新宿
定員: 200名
Convolutional Networkは、現在のニューラル・ネットワー
ク技術の中心的な技術で、また、もっとも成功した技術でもあ
ります。講演では、ニューラル・ネットワークを学び始めた人を
対象に、CNNの基本をわかりやすく解説します。

Contenu connexe

Tendances

「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化marsee101
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~nlab_utokyo
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装Shinya Akiba
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Yasutomo Kawanishi
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較Ryota Suzuki
 
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfugなにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfugNatsutani Minoru
 
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章孝好 飯塚
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会Shotaro Sano
 
Deep Learningの基礎と応用
Deep Learningの基礎と応用Deep Learningの基礎と応用
Deep Learningの基礎と応用Seiya Tokui
 
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Ohsawa Goodfellow
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)RCCSRENKEI
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningMiyoshi Kosuke
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説弘毅 露崎
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Seiya Tokui
 

Tendances (20)

「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
 
Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
 
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfugなにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
 
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
 
DeepLearningTutorial
DeepLearningTutorialDeepLearningTutorial
DeepLearningTutorial
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
 
bigdata2012ml okanohara
bigdata2012ml okanoharabigdata2012ml okanohara
bigdata2012ml okanohara
 
Deep Learningの基礎と応用
Deep Learningの基礎と応用Deep Learningの基礎と応用
Deep Learningの基礎と応用
 
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 

Similaire à TensorFlowとCNTK

20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部NVIDIA Japan
 
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~NVIDIA Japan
 
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17Masayoshi Kondo
 
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...de:code 2017
 
ICCV 2019 論文紹介 (26 papers)
ICCV 2019 論文紹介 (26 papers)ICCV 2019 論文紹介 (26 papers)
ICCV 2019 論文紹介 (26 papers)Hideki Okada
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」fukuoka.ex
 
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニックSony Network Communications Inc.
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTURE Project
 
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章Haruki Eguchi
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望Kohei KaiGai
 
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れR-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れKazuki Motohashi
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Sotaro Kimura
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 
いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成Yoshi Sakai
 
MII conference177 nvidia
MII conference177 nvidiaMII conference177 nvidia
MII conference177 nvidiaTak Izaki
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章Haruki Eguchi
 
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太Insight Technology, Inc.
 

Similaire à TensorFlowとCNTK (20)

20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
 
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
 
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
 
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
 
ICCV 2019 論文紹介 (26 papers)
ICCV 2019 論文紹介 (26 papers)ICCV 2019 論文紹介 (26 papers)
ICCV 2019 論文紹介 (26 papers)
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れR-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れ
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 
いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成
 
MII conference177 nvidia
MII conference177 nvidiaMII conference177 nvidia
MII conference177 nvidia
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章
 
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
[db tech showcase Tokyo 2015] D35:高トランザクションを実現するスケーラブルRDBMS技術 by 日本電気株式会社 並木悠太
 

Plus de maruyama097

ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolationmaruyama097
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望maruyama097
 
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座maruyama097
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Papermaruyama097
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考えるmaruyama097
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在maruyama097
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twittermaruyama097
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界maruyama097
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来maruyama097
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02maruyama097
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術maruyama097
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識maruyama097
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?maruyama097
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムmaruyama097
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考maruyama097
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットmaruyama097
 
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?maruyama097
 

Plus de maruyama097 (20)

ContainerとName Space Isolation
ContainerとName Space IsolationContainerとName Space Isolation
ContainerとName Space Isolation
 
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
 
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座
 
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper
 
Cloud OSの進化を考える
Cloud OSの進化を考えるCloud OSの進化を考える
Cloud OSの進化を考える
 
機械学習技術の現在
機械学習技術の現在機械学習技術の現在
機械学習技術の現在
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界
 
Aurora
AuroraAurora
Aurora
 
Project Araとものづくりの未来
Project Araとものづくりの未来Project Araとものづくりの未来
Project Araとものづくりの未来
 
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
 
Project Araと新しいものづくりのエコシステム
  Project Araと新しいものづくりのエコシステム  Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
エンタープライズと機械学習技術
エンタープライズと機械学習技術エンタープライズと機械学習技術
エンタープライズと機械学習技術
 
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
 
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?
 
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステムProject Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
 
人間の思考、機械の思考
人間の思考、機械の思考人間の思考、機械の思考
人間の思考、機械の思考
 
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケットグローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケット
 
Google Dremel
Google DremelGoogle Dremel
Google Dremel
 
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
 

TensorFlowとCNTK