機械学習技術の現在+tensolflow white paper

339
丸山不二夫 2015/12/22 機械学習技術の現在2

Upload: maruyama097

Post on 21-Apr-2017

2.602 views

Category:

Internet


8 download

TRANSCRIPT

Page 1: 機械学習技術の現在+TensolFlow White Paper

丸山不二夫 2015/12/22

機械学習技術の現在2

Page 2: 機械学習技術の現在+TensolFlow White Paper

“Rule-based Information Extraction is Dead! ”

--- Laura Chiticariu et al.

Page 3: 機械学習技術の現在+TensolFlow White Paper

“Unfortunately, this turns out to be very difficult. Very very difficult. And given the tremendous promise, there are lots of people working on”

--- Chris Olah

Page 4: 機械学習技術の現在+TensolFlow White Paper

"Validating correctness is a difficult enterprise because the system is inherently stochastic and only intended to behave in a certain way in expectation — potentially after hours of computation.”

--- TensorFlow White Paper

Page 5: 機械学習技術の現在+TensolFlow White Paper

Agendao Watson API

n Watson vs. Watsonn Natural Language Classifiern Dialogn Cortana, Alexa との比較n Retrieve and Rank

o Deep Learningでの自然言語へのアプローチn Deep Learning, NLP, and Representations

Page 6: 機械学習技術の現在+TensolFlow White Paper

Agendao Google TensolFlowの登場

n Google TensolFlowとは何か?n TensorFlowのプログラミング・モデルと基本的なコンセプト

n TensorFlowプログラム サンプル1線形回帰

n TensorFlowプログラム サンプル 2手書き文字の認識

o TensolFlow White Paper (翻訳)

Page 7: 機械学習技術の現在+TensolFlow White Paper

Watson API

Watson APIは、IBMが提供する一群の ”Cognitive Computing” 向けのサービスの総体である。それは、数年前に人間を破った「クイズ王」のWatsonへのAPIではない。

Page 8: 機械学習技術の現在+TensolFlow White Paper

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/

Watson APIを構成するサービスの一覧 (1)

Page 9: 機械学習技術の現在+TensolFlow White Paper

Watson APIを構成するサービスの一覧 (2)

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/

Page 10: 機械学習技術の現在+TensolFlow White Paper

Watson APIを構成するサービスの一覧 (3)

http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/

Page 11: 機械学習技術の現在+TensolFlow White Paper

Watson vs. Watson

これらのサービスの総体は、以前と同じものになるのだろうか? 筆者は、そこには大きな違いがあると考えている。

以前のWatsonについては、前回のマルレクの資料を参照してほしい。https://goo.gl/lKwiJG

Page 12: 機械学習技術の現在+TensolFlow White Paper

質問回答システムから対話システムに

o 旧Watsonは、クイズ番組Jeopardy用にチューンされた「質問回答システム」であった。一つの質問に対して一つの答えを返す。そこで旧Watsonの基本的なサイクルは閉じる。 初の質問と二番目の質問に、自然な連続した会話のように、関連がありうることは、そもそも想定されていない。

o 新しいWatson APIは、人間との自然言語による会話ができる対話システムを可能にする。それは、Google NowやSiriやCortana, Alexaと同じ方向である。旧Watsonは、(テレビのデモではわからないが)「質問」は、文字ベースだった。新しいWatsonは、発話を文字に変え(Speech to Text)、文字を発話に変える(Text to Speech)の能力を備えている。

Page 13: 機械学習技術の現在+TensolFlow White Paper

単独の無数の多様性を持ちうる「質問」とコンテキストを持つ特定パターンの「会話」

o 旧Watsonは、単独ではあるが、無数の多様性を持ちうる「質問」に答えようとする。その為に、「質問文」を文法的(基本的には、Slot Grammerの枠組みで)に解析して質問のTopicを検出し、答えの候補を複数個仮定し、自分の持つ「知識」を検索し、複数の独立した評価システムを総合して、答えを絞り込む。

o 新Watson APIで、新しく加わった「対話」機能の、「コンテキスト」は、あらかじめ人間によって設定されている。「発話」の「意図」は、新Watson APIの中核の一つである”Natural Language Classifier” では、特定の「発話」のパターンが、その「意図」と直接に結び付けられる。

Page 14: 機械学習技術の現在+TensolFlow White Paper

旧Watsonの行っていた処理

Page 15: 機械学習技術の現在+TensolFlow White Paper

対話機能の実装と、「文法」へのアプローチ

o 旧Watsonには、対話機能はない。ただし、文の文法的な性質から情報を引き出す能力は持っていた。

o 新Watson APIでの対話のシナリオは、”Dialog”を通じて、人間がプログラムする。このプログラミング作業で重要なのは、あらかじめ「発話」を予想することであり、”Dialog”の「文法」は、想定されたシナリオの元で、この予想の幅を広げる為の、正規表現(風な)による、文字列マッチングでしかない。

o こうした「対話機能」が、パーソナル、ないしは、ビジネス・アシスタント・システムとして役に立つことはあるだろう。

ただ、人間の知能の持つ重要な特質である「汎用性」を欠いていることは、明らかだと思う。知能をプログラムすることと、知能を演ずることをプログラムすることは違うのだ。

Page 16: 機械学習技術の現在+TensolFlow White Paper

“Automatic knowledge extraction from documents”http://goo.gl/MexfSl

Page 17: 機械学習技術の現在+TensolFlow White Paper

「知識」へのアプローチ

o 旧Watsonは、自前で、「知識」を持っていた。ネットに繋がっているわけではなく、閉じたものだったが、Wikipediaを全部、暗記していると思っていい。旧Watsonの力は、この「知識」を検索して、なんとか「質問応答」に生かそうとする数々の手段の多様性によって支えられていた。 終的には、それぞれのスコアの評価システムで、答え一つに絞り込まれたとしても。

o 新Watson APIでは、こうした旧Watsonの魅力的な能力は引き継がれていない。新Watsonは、裸のままでは何のデフォールトの知識も持っていない。もちろん、新Watsonに知識と評価システムを与えることはできる。”Retriece and Rank” は、そういうものだが、僕には、Solr/Lucene でしかないように見える。

Page 18: 機械学習技術の現在+TensolFlow White Paper

“Finding needles in the haystack:Search and candidate generation”http://goo.gl/8O4s26

Page 19: 機械学習技術の現在+TensolFlow White Paper

機械学習技術の利用について

o 旧Watsonでは、Neural Network/Deep Learning 的なアプローチは、ほとんで取られていない。もちろん、スコアの評価には、統計的な手法が用いられているのだが。

o 新Watson APIで提供されるサービスの少なくないものが、NN/Deep Learningの手法を取り入れている。これは、新Watson APIの大きな特徴と言っていい。

o この分野のIBMの取り組みについては、前回のマルレクの資料の後半に、TruNorthチップとCoreletの紹介がある。参照してほしい。

Page 20: 機械学習技術の現在+TensolFlow White Paper

"A million spiking-neuron integrated circuit with a scalable communication network and interface”

D.S.Modha et Alhttp://goo.gl/F27HGc

Page 21: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier

Natural Language Classifierは、ある文が、 「何についての文」であるかを判断する。

ただし、そのクラス分けの根拠は、文の文法的な解析やシステムの持つ知識ではなく、人間が与えたそのクラスに属するという複数の例文との類似に基づいている。(Amazon Alexaでの、文とIntentとの対応付けに近い)

Page 22: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier

Page 23: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Is it hot outside?

o Natural Language Classifier is 98% confident that the question submitted is talking about 'temperature’.Classification: temperatureConfidence: 98%

http://goo.gl/hGByud

Page 24: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo What is the expected high for today?

o Natural Language Classifier is 98% confident that the question submitted is talking about 'temperature’.Classification: temperatureConfidence: 98%

http://goo.gl/hGByud

Page 25: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Will it be foggy tomorrow morning?

o Natural Language Classifier is 68% confident that the question submitted is talking about ‘conditions’.Classification: conditionsConfidence: 68%

http://goo.gl/hGByud

Page 26: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Will it be foggy tomorrow morning?

o Natural Language Classifier is 68% confident that the question submitted is talking about ‘conditions’.Classification: conditionsConfidence: 68%

http://goo.gl/hGByud

Page 27: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Will it be foggy tomorrow morning?

o Natural Language Classifier is 68% confident that the question submitted is talking about ‘conditions’.Classification: conditionsConfidence: 68%

http://goo.gl/hGByud

Page 28: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Should I prepare for sleet?

o Natural Language Classifier is 91% confident that the question submitted is talking about ‘conditions’.Classification: conditionsConfidence: 91%

http://goo.gl/hGByud

Page 29: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifier Demoo Will there be a storm today?

o Natural Language Classifier is 98% confident that the question submitted is talking about ‘conditions’.Classification: conditionsConfidence: 98%

http://goo.gl/hGByud

Page 30: 機械学習技術の現在+TensolFlow White Paper

Structure of training data

Page 31: 機械学習技術の現在+TensolFlow White Paper

Structure of training data

Page 32: 機械学習技術の現在+TensolFlow White Paper

Natural Language Classifiero Watson APIの中心的なコンセプトは、"Natural

Language Classifier"。o このClassifierが、どのように学習されどのような応答が行われるかは、 以下のquestions.csvとanswers.csvという二つのファイルとanserディレクトリーの中身を見ればわかる。

Page 33: 機械学習技術の現在+TensolFlow White Paper

https://goo.gl/iubMNX

Page 34: 機械学習技術の現在+TensolFlow White Paper

question.csvo question.csvでは、似たような質問が一つのクラスにまとめられ、そのクラスに名前が与えられる。ドキュメントでは、その名前を LabelIDと呼んでいる。図1の例では、関連する似たような5つの質問に、all_training_data_used という名前が与えられている。

Page 35: 機械学習技術の現在+TensolFlow White Paper

question.csv

Page 36: 機械学習技術の現在+TensolFlow White Paper

answer.csvo answer.csvは、LabelIDについて、一つの「代表的な」質問を選んでいる。ここで、質問が、all_training_data_used というカテゴリーに分類されたとしよう。そうすると、先に述べたディレクトリーanswer以下に、all_training_data_used.html というファイルがあるので、それを「答え」として利用すればいい。

Page 37: 機械学習技術の現在+TensolFlow White Paper

answer.csv

Page 38: 機械学習技術の現在+TensolFlow White Paper

answers ディレクトリー

Page 39: 機械学習技術の現在+TensolFlow White Paper

Dialog

Dialogは、対話型の会話の流れを(XMLで)プログラムする。人間の発話の揺れや冗長性に、柔軟な文字列マッチングで対応しようとする。それを「文法」と呼んでいる。(これは、W3Cの” Speech Recognition Grammar Specification” http://www.w3.org/TR/speech-grammar/あたりの影響だと思う)

Page 40: 機械学習技術の現在+TensolFlow White Paper

Dialog

http://goo.gl/nBy5YK

Page 41: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

http://goo.gl/mwHnsK

Page 42: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 43: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 44: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 45: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 46: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 47: 機械学習技術の現在+TensolFlow White Paper

Dialog demo

Page 48: 機械学習技術の現在+TensolFlow White Paper

Dialog API

https://goo.gl/jTccqJ

Page 49: 機械学習技術の現在+TensolFlow White Paper

Dialog API

https://goo.gl/jTccqJ

Page 50: 機械学習技術の現在+TensolFlow White Paper

Dialogでの「会話」のプログラム機械からの呼びかけ

人間からの入力取得

デフォールトでは、「わかりません」と答える

ここが重要

http://goo.gl/xlUSs8

Page 51: 機械学習技術の現在+TensolFlow White Paper

Dialogでの「会話」のプログラムSearch タグ

http://goo.gl/xlUSs8

Page 52: 機械学習技術の現在+TensolFlow White Paper

Dialogでの「会話」のプログラムSearch タグ

http://goo.gl/xlUSs8

Page 53: 機械学習技術の現在+TensolFlow White Paper

Dialogでの「会話」のプログラムConcept タグ

これらは。同じ意味を持つ

http://goo.gl/xlUSs8

Page 54: 機械学習技術の現在+TensolFlow White Paper

Dialogでの「会話」のプログラムGrammer タグ

http://goo.gl/xlUSs8

Page 55: 機械学習技術の現在+TensolFlow White Paper

Grammerタグ内の Wild Card 文字Asterisk (*)o “What is * dialog” は、次のものにマッチする

o "What is a dialog"o "What is this thing called a dialog"o “What is the meaning of a dialog” o ...

Page 56: 機械学習技術の現在+TensolFlow White Paper

Grammerタグ内の Wild Card 文字Dollar sign ($)o “$ is a dialog” は、次のものにマッチする。

o "So, can you tell me what is a dialog, please"o "I've heard about virtual agents, but is a dialog

one of those"o "Tell me, is a dialog something I can create"o "Is a dialog something I can use for my

business”o ...

Page 57: 機械学習技術の現在+TensolFlow White Paper

Grammerタグ内の Wild Card 文字Percent sign (%)o “% is a dialog”は、次のものにマッチする。

o What is a dialogo Can you tell me about a dialogo What is ito iso a dialogo ...

Page 58: 機械学習技術の現在+TensolFlow White Paper

Grammerタグ内の Wild Card 文字Hash sign (#)o “# is dialog”は、次のものにマッチする。

o What is a Dialogo Can you tell me what Dialog iso Is this thing I'm looking at a Dialogo What is Dialog

Page 59: 機械学習技術の現在+TensolFlow White Paper

Pizza demoのsourceの一部

https://goo.gl/3aGRjG

Page 60: 機械学習技術の現在+TensolFlow White Paper

Cortana, Alexa との比較

Page 61: 機械学習技術の現在+TensolFlow White Paper

helloGoodbye「こんにちは」 「さようなら」

<VoiceCommands ...<CommandSet ...

<Command Name=“helloGoodbye"><ListenFor ...>こんにちは

</ListenFor><Feedback> さようなら </Feedback>...

</Command>

音声入力 音声出力音声コマンド

音声コマンドの定義ファイル

MS Cortanaのスタイル

Page 62: 機械学習技術の現在+TensolFlow White Paper

MS CortanaVoice Commandの定義サンプル

<VoiceCommandsxmlns="http://schemas.microsoft.com/voicecommands/1.2"><CommandSet xml:lang="en-us”

Name="AdventureWorksCommandSet_en-us"><CommandPrefix> Adventure Works, </CommandPrefix><Example> Show trip to London </Example><Command Name="showTripToDestination"><Example> Show trip to London </Example><ListenFor RequireAppName="BeforeOrAfterPhrase">

show [my] trip to {destination} </ListenFor><ListenFor RequireAppName="ExplicitlySpecified">

show [my] {builtin:AppName} trip to {destination} </ListenFor><Feedback> Showing trip to {destination} </Feedback><Navigate Target="foo"/>

</Command>

Page 63: 機械学習技術の現在+TensolFlow White Paper

Speechlet「こんにちは」 「さようなら」

Request Response

SampleUtterances.txt

public SpeechletResponse onIntent (...) ... {...if ("HelloIntent".equals(intentName)) {

return getHelloResponse();} else if ("HelpIntent".equals(intentName)) {

return getHelpResponse();} else {

throw new SpeechletException("Invalid Intent");}

}

private SpeechletResponse getHelloResponse() {String speechText = “さようなら”;SimpleCard card = new SimpleCard();...return SpeechletResponse.newTellResponse(speech, card);

}音声とカードが返るAmazon Alexaのスタイル

Page 64: 機械学習技術の現在+TensolFlow White Paper

helloworld.speechAsset.SampleUtterances.txt

HelloWorldIntent say helloHelloWorldIntent say hello worldHelloWorldIntent helloHelloWorldIntent say hiHelloWorldIntent say hi worldHelloWorldIntent hiHelloWorldIntent how are you

HelpIntent helpHelpIntent help meHelpIntent what can I ask youHelpIntent get helpHelpIntent to helpHelpIntent to help me

intentName 発話

cortanaのListenForと同じ働きをする。それぞれの発話に、intentNameが付けられている。

“say hello”と“how areyou”は、同じintentNameが割り当てられている。

Page 65: 機械学習技術の現在+TensolFlow White Paper

Retrieve and Rank

Page 66: 機械学習技術の現在+TensolFlow White Paper

Retrieve and Rank

http://goo.gl/t09wXt

Page 67: 機械学習技術の現在+TensolFlow White Paper

Apache Solr

http://goo.gl/lX70zT

Page 68: 機械学習技術の現在+TensolFlow White Paper
Page 69: 機械学習技術の現在+TensolFlow White Paper

Retrieve and Rank Demo

Page 70: 機械学習技術の現在+TensolFlow White Paper

Retrieve and Rank Demo

Page 71: 機械学習技術の現在+TensolFlow White Paper
Page 72: 機械学習技術の現在+TensolFlow White Paper

Retrieve and Rank Demo

Page 73: 機械学習技術の現在+TensolFlow White Paper

Cranfield collection ?

Page 74: 機械学習技術の現在+TensolFlow White Paper

Create Solr cluster

http://goo.gl/9khkd5

Page 75: 機械学習技術の現在+TensolFlow White Paper

List Solr configuration

http://goo.gl/9khkd5

Page 76: 機械学習技術の現在+TensolFlow White Paper

Index document

http://goo.gl/9khkd5

Page 77: 機械学習技術の現在+TensolFlow White Paper

Search Solr standard query

http://goo.gl/9khkd5

Page 78: 機械学習技術の現在+TensolFlow White Paper

Search and Rank

http://goo.gl/9khkd5

Page 79: 機械学習技術の現在+TensolFlow White Paper

Deep Learningでの自然言語へのアプローチ

ここでは、Cristopher Olahの ”Deep Learning, NLP, and Representations”に依拠して、Deep Learningの世界での自然言語へのアプローチのトピックを紹介する

Page 80: 機械学習技術の現在+TensolFlow White Paper

Deep Learning, NLP, and Representations

Christpher Olahhttp://colah.github.io/posts/2014-07-NLP-RNNs-Representations/

Page 81: 機械学習技術の現在+TensolFlow White Paper

Deep Learning, NLP, and Representations

http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/

Page 82: 機械学習技術の現在+TensolFlow White Paper

Word Embeddingsとは何かo Word Embeddingは、ある言語の「語」を、n次元(200次元とか500次元とかの高次元)ベクトル空間 Rn に写像する関数Wのこと

W : words → Rn

o 例えば、W(‘‘ネコ“)=(0.2, -0.4, 0.7, ...)W(‘‘イヌ")=(0.0, 0.6, -0.1, ...)

Page 83: 機械学習技術の現在+TensolFlow White Paper

統計的言語モデル

o 2003年のBenjio らの “A Neural Probabilistic Language Model” http://goo.gl/948I43 が、 初の試み。 「統計的言語モデルの目標は、ある言語内での語の並びの結合確率関数を学ぶことである。」

o “This is intrinsically difficult because of the curse of dimensionality:” なぜなら、語彙の数が、一万語だとしても、わずか10語からなる文の可能性は、一万の10乗にもなることになるから。

o Benjioらは、ある語がコーパスの文中に現れる時、その後に続く語の確率を、すべての語について、ニューラル・ネットワーク・モデルで計算しようとした。

Page 84: 機械学習技術の現在+TensolFlow White Paper

ニューラル・ネットを使った単語選択

o {to, two, too}という言葉は、発音はよく似ている。今、次の文の下線部に、先の三つの単語{to, two, too}から、一つ選んで文章を作るという問題を考えよう。For breakfast I ate _____eggs. 正解は、もちろんtwoである。多くの人は、two以外だと文法的に正しくないし、意味が通らないと考えるだろう。

o ところが、ニューロ・ネットを使った単語選択の考え方は、それとは異なる。沢山の用例を調べて、同じようなものがあれば、それを選ぶ。 次の例は、Andrew NgのMachine LearningについてのCourseraの講義からの抜粋。10億個のデータで学習させても、この簡単な例でも、正解率は、100%に届かない。

Page 85: 機械学習技術の現在+TensolFlow White Paper

It’s not who has the best algorithm that wins.It’s who has the most data.

http://bit.ly/1qKh8ro

横軸が対数のグラフ

10億

Page 86: 機械学習技術の現在+TensolFlow White Paper

ニューラルネットによる文章の学習

o Googleの Ilya Sutskeverは、文字数が5億文字にものぼるテキストを長い時間をかけてRecurrent Neural Nets に学習させ、次のページのような文章を生成することができた。

http://bit.ly/1qN5Pes

Page 87: 機械学習技術の現在+TensolFlow White Paper

“An example of what recurrent neural nets can now do” WikiPedia で学習したもの

o The meaning of life is the tradition of the ancient human reproduction: it is less favorable to the good boy for when to remove her bigger. In the show’s agreement unanimously resurfaced. The wild pasteuredwith consistent street forests were incorporated by the 15th century BE. In 1996 the primary rapford undergoes an effort that the reserve conditioning, written into Jewish cities, sleepers to incorporate the .St Eurasia that activates the population.

http://goo.gl/vHRHSn

Page 88: 機械学習技術の現在+TensolFlow White Paper

“An example of what recurrent neural nets can now do” New York Timesで学習

o while he was giving attention to the second advantage of school building a 2-for-2 stool killed by the Cultures saddled with a halfsuitdefending the Bharatiya Fernall ’s office . Ms . Claire Parters will also have a history temple for him to raise jobs until naked Prodiena to paint baseball partners , provided people to ride both of Manhattan in 1978 , but what was largely directed to China in 1946 , focusing on the trademark period is the sailboat yesterday and comments on whom they obtain overheard within the 120th anniversary , where ......

http://goo.gl/vHRHSn

Page 89: 機械学習技術の現在+TensolFlow White Paper

画像認識と言語モデルの複雑さの比較

o 「ディープ・ニューラル・ネットワークの計算グラフは、きわめて複雑なものになりうる。例えば、GoogleのInceptionモデル[48]に似た訓練用の計算グラフは、ディープ・コンボリューション・ニューラル・ネットワークで、2014年のコンテストで 高の分類パフォーマンスを示したのだが、TensorFlowの計算グラフでは、36,000個以上のノードを持っている。そして、言語モデルのためのディープ・リカレントLSTMモデルは、15,000以上のノードを持っている。」

“TensorFlow Whitepaper” 第9節から

Page 90: 機械学習技術の現在+TensolFlow White Paper

Word2Vecの登場o 2013年に、GoogleのTomas Mikolovらは、語が埋め込まれたベクター空間が、言語学的に(文法的にも、意味論的にも)面白い性質を持っていることを発見する。

o “We find that these representations are surprisingly good at capturing syntactic and semantic regularities in language, and that each relationship is characterized by a relation-specific vector offset.” (Linguistic Regularities in Continuous Space WordGoogRepresentations http://research.microsoft.com/pubs/189726/rvecs.pdf )

o Jeff Deanも、この論文に注目して、共同の作業が始まる。

Page 91: 機械学習技術の現在+TensolFlow White Paper

Word2Vecの登場o Google Codeに、オープンソースとして公開され、

https://code.google.com/p/word2vec/ 大きな関心を集める。

o ここで使われているモデルは、次の二つ。

n CBOW(Continuus Bag-of-Word”) モデル複数の語の集まりから、一緒に出現しそうな一つの語の確率を調べる。

n Skip-gram モデル一つの語が与えられた時、一緒に出現しそうな複数の語の確率を調べる。

Page 92: 機械学習技術の現在+TensolFlow White Paper

http://arxiv.org/pdf/1301.3781.pdf

“cat”

“sat”

“the”

“mat”

“on”

“cat”

“sat”

“the”

“mat”

“song”

Page 93: 機械学習技術の現在+TensolFlow White Paper

語をベクトルに変換する関数Wの利用Modular Network

o “cat sat on the mat” 正しい文R(W(‘‘cat"), W(‘‘sat"), W(‘‘on"), W(‘‘the"), W(‘‘mat"))=1

o “cat sat song the mat” 正しくない文R(W(‘‘cat"), W(‘‘sat"), W(‘‘song"), W(‘‘the"), W(‘‘mat"))=0

正しくない

Bottou: http://research.microsoft.com/pubs/192773/tr-2011-02-08.pdf

Page 94: 機械学習技術の現在+TensolFlow White Paper

t-SNE: 「語埋め込み」の可視化

Page 95: 機械学習技術の現在+TensolFlow White Paper

t-SNE: visualizations of Words embeddings

先の出力の一部を拡大したもの

Page 96: 機械学習技術の現在+TensolFlow White Paper

LeCunのLeNetによる手書き文字認識学習用手書き文字データ MNISTを利用

http://yann.lecun.com/exdb/lenet/

Page 97: 機械学習技術の現在+TensolFlow White Paper

t-SNEによる学習されたMNIST データの可視化

https://lvdmaaten.github.io/tsne/

Page 98: 機械学習技術の現在+TensolFlow White Paper

t-SNEによる学習されたMNIST データの可視化 (3D版)

Page 99: 機械学習技術の現在+TensolFlow White Paper

どんな語が、与えられた語の近くに埋め込まれるか?

Collobert et al. (2011) http://arxiv.org/pdf/1103.0398v1.pdf

Page 100: 機械学習技術の現在+TensolFlow White Paper

どんな語が、与えられた語の近くに埋め込まれるか?

o 似た意味を持つ言葉は、似たベクトルを持つ。

o 似た言葉で置き換えても、正しい文は、正しい文に変わる。

“a few people sing well” 正しい文

“a couple people sing well” 正しい文

o 意味が似ていなくても、同じクラスの言葉で置き換えても、正しい文は、正しい文に変わる。

“the wall is blue” “the ceiling is red”

Page 101: 機械学習技術の現在+TensolFlow White Paper

意味を変換するベクトルは共通?

o Word Embeddingは、もっと面白い性質を持つ。下の図のように、男性から女性へのベクトルがあるように見える。

o W(‘‘woman“)−W(‘‘man”) ≃ W(‘‘aunt“)−W(‘‘uncle”)W(‘‘woman")−W(‘‘man") ≃ W(‘‘queen")−W(‘‘king")

Page 102: 機械学習技術の現在+TensolFlow White Paper

http://arxiv.org/pdf/1310.4546.pdf

国を首都に対応づけるベクトル

Page 103: 機械学習技術の現在+TensolFlow White Paper

ベクトルで表現される関係の例

Mikolov et al (2013) http://arxiv.org/pdf/1301.3781.pdf

Page 104: 機械学習技術の現在+TensolFlow White Paper

Mikalov et al http://arxiv.org/pdf/1301.3781.pdf

文法的関係を表すベクトルも存在する

Page 105: 機械学習技術の現在+TensolFlow White Paper

語が埋め込まれたベクトル空間を様々な目的で共有する

o いったん、ベクトル空間での語の表現が出来上がれば、その表現を共有して自然言語について、様々な処理が可能となる。

o 例えば、

n 名前を持つ実体の認識

n 品詞の分類

n 構文解析

n 意味的役割のラベル付け

http://nlp.stanford.edu/~lmthang/data/papers/conll13_morpho.pdf

Page 106: 機械学習技術の現在+TensolFlow White Paper

二ヶ国語の埋め込み

o 二つの事なった言語を、同一のベクトル空間に埋め込む事ができる。例えば、英語と中国語。

o 英語と中国語には、同じ意味の言葉がある。二つの言語を埋め込む時、我々が両方の意味を知っているものについては、同じ意味を持つものを、

できるだけ近くなるように調節する。

o そうすると、我々が知らない言葉でも、同じ意味を持つものは、近いと

ころに埋め込まれる。

Socher, rt al http://goo.gl/DRt79o

Page 107: 機械学習技術の現在+TensolFlow White Paper

Socher, rt al http://goo.gl/DRt79o

Page 108: 機械学習技術の現在+TensolFlow White Paper

言葉とイメージの埋め込み

o 今度は、言葉と画像イメージを、同一のベクトル空間に埋め込む取り組み。

o イヌの画像は、「イヌ」という言葉の近くに、ウマの画像は、「ウマ」という言葉の近くに埋め込む。

o こうした時、ネコについて、特に訓練しなくても、ネコの画像は、「ネコ」という言葉の近くに見つかるという。

Socher et al. (2013b) http://goo.gl/TdFSuK

Page 109: 機械学習技術の現在+TensolFlow White Paper

This was done by members of the Stanford group with only 8 known classes (and 2 unknown classes).

Page 110: 機械学習技術の現在+TensolFlow White Paper
Page 111: 機械学習技術の現在+TensolFlow White Paper

画像と意味を埋め込んだモデル

Frome et al http://goo.gl/QPAARB

Page 112: 機械学習技術の現在+TensolFlow White Paper

画像と意味を埋め込んだモデル

Frome et al http://goo.gl/QPAARB

Page 113: 機械学習技術の現在+TensolFlow White Paper

Recursive Neural Networkso Modular Networkは、固定された数の入力しか持たない。

(この例では、5個)

o この限界を、結合モジュール

Aを導入する事で、克服できる。

Page 114: 機械学習技術の現在+TensolFlow White Paper

Recursive Neural Networkso これは、“((the cat) (sat (on (the mat))” を、結合モジュールを使って表したもの。

o こうしたモデルは、モジュールの出力が同じタイプのモジュールの入力となるので、 “recursive neural networks” と呼ばれる。また、 “tree-structured neural networks”とも呼ばれる。

Page 115: 機械学習技術の現在+TensolFlow White Paper

文 “This film does’nt care about cleverness wit or any other kind of intelligenct humor” の解析

Socher, et al. http://goo.gl/bPAQ68

文法構造をニューラル・ネットで表現する!

Page 116: 機械学習技術の現在+TensolFlow White Paper

Phraseの埋め込み

http://arxiv.org/pdf/1406.1078v1.pdf

Page 117: 機械学習技術の現在+TensolFlow White Paper

Google TensolFlowの登場

Google TensolFlowの発表は、2015年のAI/MLのシーンで、 大のトピックである。そのインパクトは大きい。https://www.tensorflow.org/

Page 118: 機械学習技術の現在+TensolFlow White Paper

http://download.tensorflow.org/paper/whitepaper2015.pdf

Page 119: 機械学習技術の現在+TensolFlow White Paper

TensorFlowとは何か?o TensorFlow は、マシン・ラーニングのアルゴリズムを表現するインターフェースである。

o TensorFlowは、同時に、そうしたアルゴリズムを実行する実装である。

o Googleは、大規模な機械学習システムの第一世代としてDistBeliefを構築していた(「Googleの猫」のマシン)。TensorFlowは、大規模マシン・ラーニング・モデルの実装と配備のための、第二世代のシステムだという。

Page 120: 機械学習技術の現在+TensolFlow White Paper

TensorFlowとは何か?o TensorFlowがカバーする範囲は、AndroidやiOSといったモバイル・デバイス上での推論の実行から、数千のGPUを持つ数百台の特別のマシン上で走る大規模な訓練システムに及んでいる。

o Googleは、TensorFlow APIと参照実装を 2015年の11月に、Apache 2.0ライセンスの下でオープンソースにした。 www.tensorflow.org から利用可能である。

Page 121: 機械学習技術の現在+TensolFlow White Paper

TensorFlowのプログラミング・モデルと基本的なコンセプト

Page 122: 機械学習技術の現在+TensolFlow White Paper

グラフとノードとテンソル

p TensorFlow の計算は、ノードの集合からなる有向グラフによって記述される。それぞれのノードは、入力と出力を持ち、ある演算のインスタンスを表現している。

pグラフは、データフロー計算を表現している。グラフの中で、流れる値はテンソルである。テンソルは、任意の次元を持つ配列である。

pただ、ある種類のノード(Variable等)にパーシステントな状態の維持と更新を可能とし、また、グラフ内の分岐とループの制御構造を持つように拡張している。

pクライアントは、サポートされたフロントエンドの言語(C++ または Python)を利用して計算グラフを構築する。

Page 123: 機械学習技術の現在+TensolFlow White Paper

TensorFlowのコードとグラフのサンプルimport tensorflow as tf

b = tf.Variable(tf.zeros([100]))W = tf.Variable(tf.random_uniform([784,100],-1,1))x = tf.placeholder(name=“x”)relu = tf.nn.relu(tf.matmul(W, x) + b)C = [...]

s = tf.Session() for step in xrange(0, 10):

input = ...construct 100-D input array ...result = s.run(C, feed_dict={x: input})print step, result

Page 124: 機械学習技術の現在+TensolFlow White Paper

演算とカーネル

o 演算は名前を持っていて抽象的な計算を表現する(例えば、”matrix multiply”や “add”のように)。

o カーネルは、特別なタイプのデバイス(例えば、CPUかGPUか)の上で実行可能な、特別な演算の実装のことである。

Page 125: 機械学習技術の現在+TensolFlow White Paper

TensorFlow の演算o 要素ごとの数学的演算

Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal, ...

o 配列の演算Concat, Slice, Split, Constant, Rank, Shape,Shuffle, ...

o 行列の演算MatMul, MatrixInverse, MatrixDeterminant, ...

o 状態を持つ演算Variable, Assign, AssignAdd, ...

Page 126: 機械学習技術の現在+TensolFlow White Paper

TensorFlow の演算o ニューラル・ネットワークの構成要素

SoftMax, Sigmoid, ReLU, Convolution2D,MaxPool, ...

o チェックポイント演算Save, Restore

o キューと同期の演算Enqueue, Dequeue, MutexAcquire,MutexRelease, ...,

o 制御の流れの演算Merge, Switch, Enter, Leave, NextIteration

Page 127: 機械学習技術の現在+TensolFlow White Paper

セッション

o クライアントのプログラムは、セッションを生成することでTensorFlowのシステムと相互作用する。

o セッション・インターフェースによってサポートされている他の重要なオペレーションは、 Runである。

o TensorFlowの利用の大部分では、いったんグラフでセッションをセットアップすると、そのあとは、Runの呼び出しを通じて、グラフ全体あるいは少数の部分グラフを数千ないしは数百万回実行する。

Page 128: 機械学習技術の現在+TensolFlow White Paper

変数(Variable)o 大部分の計算では、一つのグラフは複数回実行される。大部分のテンソルは、グラフの一回の実行のあとにはいき残らない。しかし、変数は、グラフの実行を通じて生き残るパーシステントな複製可能なテンソルへのハンドルを返す特別な種類の演算である。

Page 129: 機械学習技術の現在+TensolFlow White Paper

クライアントとマスターとスレーブ

o TensorFlowシステムの主要なコンポーネントはクライアントである。

o クライアントは、セッション・インターフェースを使ってマスターと、さらに、一つ以上のワーカー・プロセスと通信する。

o それぞれのワーカー・プロセスは、一つ以上の計算デバイス(CPUコアとかGPUコアといった)へのアクセスの調停とマスターに指示されたデバイス上でのグラフ・ノードの実行に責任を持っている。

Page 130: 機械学習技術の現在+TensolFlow White Paper

単一マシンと分散システムの構造

Page 131: 機械学習技術の現在+TensolFlow White Paper

デバイス

o デバイスは、TensorFlowの計算の心臓部分である。それぞれのワーカーは一つ以上のデバイスに責任を持っている。

o それぞれのデバイスは、デバイスの型と名前を持っている。デバイス名の例は、次のようになる。"/job:localhost/device:cpu:0" "/job:worker/task:17/device:gpu:3".

Page 132: 機械学習技術の現在+TensolFlow White Paper

テンソル

o テンソルは、型付けられた多次元の配列である。

o TensorFlowは、多様なテンソル要素の型をサポートしている。8bitから64bitのサイズの、符号付・符号なしの整数。IEEEの浮動小数点と倍精度と複素数、文字列型(任意のバイト配列)がある。

o テンソルの格納場所の適切なサイズは、テンソルが存在するデバイス上で特有のアロケータ−によって管理される。

Page 133: 機械学習技術の現在+TensolFlow White Paper

TensorFlowプログラム サンプル1線形回帰

Page 134: 機械学習技術の現在+TensolFlow White Paper

....W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1]))y = W * x_data + b

# Minimize the mean squared errors. loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

# Before starting, initialize the variables. We will 'run' this first. init = tf.initialize_all_variables()

# Launch the graph. sess = tf.Session() sess.run(init)

# Fit the line. for step in xrange(201):

sess.run(train) if step % 20 == 0:

print(step, sess.run(W), sess.run(b))

Page 135: 機械学習技術の現在+TensolFlow White Paper

....W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1]))y = W * x_data + b

# Minimize the mean squared errors. loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

# Before starting, initialize the variables. We will 'run' this first. init = tf.initialize_all_variables()

# Launch the graph. sess = tf.Session() sess.run(init)

# Fit the line. for step in xrange(201):

sess.run(train) if step % 20 == 0:

print(step, sess.run(W), sess.run(b))

グラフの定義

アルゴリズム

グラフの起動

グラフで訓練繰り返し

Page 136: 機械学習技術の現在+TensolFlow White Paper

まず、アルゴリズムを理解しよう

ポイントは線形回帰と勾配降下法だが、それには、次のサンプルでの説明がわかりやすい、

Andrew NgのCourseraのML講義に依拠https://www.coursera.org/course/ml

Page 137: 機械学習技術の現在+TensolFlow White Paper

ポートランドでの実際の家の価格

これを予測の為の訓練用データとして利用する

面積 feet2

(x)価格 千ドル単位

(y)2104 4601416 2321534 315852 178… …

記号の意味:m = 訓練用データの数x = “入力” 変数 / 特徴y = “出力” 変数 / “ターゲット” 変数

m= 97

このサンプルは、何をしようとしているのか家の面積から価格を予想する

Page 138: 機械学習技術の現在+TensolFlow White Paper

仮説:

面積 feet2

(x)価格 千ドル単位

(y)2104 4601416 2321534 315852 178… …

予測の為の訓練用データ

家の価格hは、家の面積をxとした時、上の式で表されると仮定する。

問題:この時、パラメーター は、どのように選べばいいか?

Page 139: 機械学習技術の現在+TensolFlow White Paper

0

1

2

3

0 1 2 30

1

2

3

0 1 2 30

1

2

3

0 1 2 3

h は、x の一次式なので、h のグラフは、直線になる。パラメーター θi が変わると、グラフも変わる。

訓練用データの点(x, y) について、yがもっとも、hθ(x)に近ずくように、θ0, θ1を決める。

Page 140: 機械学習技術の現在+TensolFlow White Paper

誤差

誤差

誤差誤差

先のアルゴリズム中のloss = tf.reduce_mean(tf.square(y - y_data))は、誤差の尺度

Page 141: 機械学習技術の現在+TensolFlow White Paper
Page 142: 機械学習技術の現在+TensolFlow White Paper
Page 143: 機械学習技術の現在+TensolFlow White Paper
Page 144: 機械学習技術の現在+TensolFlow White Paper
Page 145: 機械学習技術の現在+TensolFlow White Paper
Page 146: 機械学習技術の現在+TensolFlow White Paper

誤差を 小にするθ0 , θ1を求める

o サンプル中のi 番目の点を (x(i), y(i))とすれば、点 x(i) での誤差は、hθ(x(i)) – y(i) となる。

o 誤差は、正負の値をとるので、単純に、誤差の平均を取っても、打ち消しあって、全体としての誤差の大きさはわからなくなる。

o そこで、誤差の二乗をとって、その平均を 小にすることを考える。

o θ0 , θ1の関数である、この誤差の二乗の平均を、コスト関数と呼ぶことがある。

Page 147: 機械学習技術の現在+TensolFlow White Paper

仮説:

パラメーター:

コスト関数:

目標:

問題の整理

Page 148: 機械学習技術の現在+TensolFlow White Paper

コスト関数

先のサンプルでは、Loss関数(損失関数)と呼ばれている。同じものである。次のプログラムは、Loss関数を定義し、それをGradientDescentを使って 小のものにせよということである。

loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

Page 149: 機械学習技術の現在+TensolFlow White Paper

コスト関数 J(θ0 , θ1)は、θ0 , θ1 についての関数なので、次のような形をしている

Page 150: 機械学習技術の現在+TensolFlow White Paper

θ1θ0

J(θ0,θ1)

コスト関数 J(θ0 , θ1)の別の例

Page 151: 機械学習技術の現在+TensolFlow White Paper

(for fixed , this is a function of x) (function of the parameters )

Page 152: 機械学習技術の現在+TensolFlow White Paper

(for fixed , this is a function of x) (function of the parameters )

Page 153: 機械学習技術の現在+TensolFlow White Paper

(for fixed , this is a function of x) (function of the parameters )

Page 154: 機械学習技術の現在+TensolFlow White Paper

(for fixed , this is a function of x) (function of the parameters )

Page 155: 機械学習技術の現在+TensolFlow White Paper

Gradient descent勾配降下法

Gradient descent 勾配降下法は、ニューラル・ネットワークのパラメーター更新の基本的な手段である。TensorFlowでは、 Gradient descent が、標準的な関数として、あらかじめ組み込まれている。先のアルゴリズムでは、optimizer = tf.train.GradientDescentOptimizer(0.5) の形で利用されている。

Page 156: 機械学習技術の現在+TensolFlow White Paper

ある関数があって

その値を 小にしたい

基本的な考え方:

• ある からはじめる。

• の値を、 が減少するように

変化させる。

• 小値になるまで、繰り返す。

Gradient descent(勾配降下法)

Page 157: 機械学習技術の現在+TensolFlow White Paper

簡単にするために、二次元のグラフで考えよう。ある点から始めて、その点から極小点に近ずくためには、どうすればいいか?

二つの場合がある。

その点が極小点の右側にある場合には、その点のx座標を少し減らせばいい。その点が極小点の左側にある場合には、その点のx座標を少し増やせばいい。

その点が、極小点の右にあるか左にあるかは、その点での接戦の傾きが、正であるか負であるかでわかる。

よって、α を正の数値とすれば、次の式が、より近づいた点の位置を与える。

直感的な説明

Page 158: 機械学習技術の現在+TensolFlow White Paper

If α is too small, gradient descent can be slow.

If α is too large, gradient descent can overshoot the minimum. It may fail to converge, or even diverge.

アルファが、あまりに小さいと、Gradient descentは、ゆっくりにしか進まない。

アルファが、あまりに大きいと、Gradient descentは、 小値を通り越してしまう。場合によっては、振動したり、収束しない場合もある。

このアルファを学習率(Learning Rate)という。

Page 159: 機械学習技術の現在+TensolFlow White Paper

Gradient descentは、アルファが固定されていても、極小値に収束できる。

局所的な 小値に近づくにつれ、gradient descentは、自動的に小さなステップを取るようになるので、繰り返しアルファを小さくしてゆく必要はない。

Page 160: 機械学習技術の現在+TensolFlow White Paper

θ1θ0

J(θ0,θ1)

Page 161: 機械学習技術の現在+TensolFlow White Paper

θ0

θ1

J(θ0,θ1)

ある場合には、 小値ではなく、局所的な極小値に、入り込むことがある。

Page 162: 機械学習技術の現在+TensolFlow White Paper

http://arxiv.org/pdf/1210.0811v2.pdf

gradient descent method

Page 163: 機械学習技術の現在+TensolFlow White Paper

....W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1]))y = W * x_data + b

# Minimize the mean squared errors. loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

# Before starting, initialize the variables. We will 'run' this first. init = tf.initialize_all_variables()

# Launch the graph. sess = tf.Session() sess.run(init)

# Fit the line. for step in xrange(201):

sess.run(train) if step % 20 == 0:

print(step, sess.run(W), sess.run(b))

Page 164: 機械学習技術の現在+TensolFlow White Paper

TensorFlowプログラム サンプル2手書き文字の認識

Page 165: 機械学習技術の現在+TensolFlow White Paper

....# Create the modelx = 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 optimizery_ = tf.placeholder("float", [None, 10])cross_entropy = -tf.reduce_sum(y_ * tf.log(y))train_step = tf.train.GradientDescentOptimizer(0.01)¥

.minimize(cross_entropy)

# Traintf.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

Page 166: 機械学習技術の現在+TensolFlow White Paper

....# Create the modelx = 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 optimizery_ = tf.placeholder("float", [None, 10])cross_entropy = -tf.reduce_sum(y_ * tf.log(y))train_step = tf.train.GradientDescentOptimizer(0.01)¥

.minimize(cross_entropy)

# Traintf.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

Page 167: 機械学習技術の現在+TensolFlow White Paper

線形回帰とクラス分類との比較変数の定義部分

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1]))y = W * x_data + b

W = tf.Variable(tf.zeros([784, 10]))b = tf.Variable(tf.zeros([10]))y = tf.nn.softmax(tf.matmul(x, W) + b)

実数が行列に変わっているだけで、ほとんど同じものだ。

mutmul(x, W)は、行列同士の掛け算である。クラス分類の方に、softmaxがつくのは当然である。

線形回帰

クラス分類

Page 168: 機械学習技術の現在+TensolFlow White Paper

線形回帰とクラス分類との比較アルゴリズムの定義部分

loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

cross_entropy = -tf.reduce_sum(y_ * tf.log(y))train_step = tf.train.GradientDescentOptimizer(0.01)¥

.minimize(cross_entropy)

Loss関数の定義が変わっているが、Gradient Descent 法を使って、Loss関数が 小になるように、ステップごとにパラメーターを変化させていくという考え方は、共通である。

線形回帰

クラス分類

Page 169: 機械学習技術の現在+TensolFlow White Paper

ニューラル・ネットワークの“Hello World!”o この辺りまでが、ニューラル・ネットワークの”Hello

World !” にあたる基本である。数値予測とクラス分類は、ニューラル・ネットワーク利用の二大分野であるので、その基礎は、しっかり押さえておく必要がある。

o 手書き文字の認識でも、もっと精度の高いConvolutional Neural Network を使うモデルは、急に複雑になる。同じMNISTデータを使うTensorFlow用のモデルのサンプルが公開されている。https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/image/mnist/convolutional.py

Page 170: 機械学習技術の現在+TensolFlow White Paper

Google TensorFlowWhite Paper

http://download.tensorflow.org/paper/whitepaper2015.pdf

Page 171: 機械学習技術の現在+TensolFlow White Paper
Page 172: 機械学習技術の現在+TensolFlow White Paper

Abstract

Page 173: 機械学習技術の現在+TensolFlow White Paper

o TensorFlow [1] は、マシン・ラーニングのアルゴリズムを表現するインターフェースであり、同時に、そうしたアルゴリズムを実行する実装である。TensorFlowを用いて表現される計算は、携帯電話やタブレットといったモバイル・デバイスから、数百のマシンと数千のGPUカードのような計算デバイスを持つ大規模分散システムにいたる、広い範囲の多様なヘテロなシステムで、ほとんど、あるいは、全く変更なしで実行することができる。

Page 174: 機械学習技術の現在+TensolFlow White Paper

o このシステムは、柔軟で、ディープ・ニューラル・ネットワークのための訓練と推論のアルゴリズムを含む、広い範囲の多様なアルゴリズムを表現するために利用できる。また、このシステムは、先導的研究のために、また、マシン・ラーニング・システムをコンピュータ・サイエンスやその他の分野の数十の領域をまたいで、生産の場に配備するために使われてきた。これらの中には、音声認識、コンピュータ・ビジョン、ロボット工学、情報抽出、自然言語処理、地理情報抽出、コンピュータによる薬品の発見といった領域が含まれている。

Page 175: 機械学習技術の現在+TensolFlow White Paper

o この論文は、TensorFlowのインターフェースと、我々がGoogleで構築した、このインターフェースの実装について述べたものである。TensorFlow APIと参照実装は、2015年の11月に、Apache 2.0 ライセンスで、オープンソース・パッケージとして公開された。www.tensorflow.orgから利用可能である。

Page 176: 機械学習技術の現在+TensolFlow White Paper

論文の構成

1. イントロダクション2. プログラミング・モデルと基本的なコンセプト3. 実装4. 拡張5. 適化

6. 現状と経験7. よく使われるプログラミング上のイディオム8. パフォーマンス9. ツール10.将来の仕事11.関連した仕事12.結論

Page 177: 機械学習技術の現在+TensolFlow White Paper

1. イントロダクション

Page 178: 機械学習技術の現在+TensolFlow White Paper

o Google Brain プロジェクトは、研究とGoogle製品での利用の両面で、非常に大規模なディープ・ニューラル・ネットワークの利用を開拓するために、2011年に開始された。このプロジェクトの初期の仕事の一部として、我々は、スケーラブルな分散訓練推論システム[14]の第一世代としてDistBeliefを構築した。そして、このシステムは、我々に非常に役立った。 我々とGoogleの他のメンバーは、DistBeliefを使って、広い範囲の多様な研究を遂行してきた。これらには、次の仕事が含まれる。教師なし学習[31], 言語の表現 [35, 52], イメージ分類と対象検出のモデル [16, 48], ビデオの分類 [27], 音声認識[56, 21, 20],シーケンスの予測 [47], 碁の指し手の選択 [34], 歩行者の検出 [2], 強化学習 [38], そして、その他の領域 [17, 5]。

Page 179: 機械学習技術の現在+TensolFlow White Paper

o それに加えて、しばしばGoogle Brainチームと密接に連携して、Googleと、その他のAlphabetの会社の50以上のチームがDistBeliefを使って、ディープ・ニューラル・ネットワークを、広い範囲の多様な製品に配備してきた。その中には、Google Search [11], 我々の広告製品,我々の音声認識 [50, 6, 46], Google Photos [43],Google Maps と StreetView [19], Google Translate [18], YouTube, その他多くのものが含まれている。

Page 180: 機械学習技術の現在+TensolFlow White Paper

o DistBeliefでの我々の経験と、ニューラル・ネットワークの訓練と利用にとって望ましいシステムの特性と要請のより完全な理解に基づいて、我々は、TensorFlowを構築した。それは、大規模マシン・ラーニング・モデルの実装と配備のための、我々の第二世代のシステムである。TensorFlowは、データフローに似たモデルを利用して記述される計算を使う。そして、それを広い範囲の多様な異なったハードウェア・プラットフォーム上にマップする。その範囲は、AndroidやiOSといったモバイル・デバイス上での推論の実行から、一つあるいは多数のGPUカードを含んだ単一のマシンを利用した中規模の訓練と推論のシステム、さらには、数千のGPUを持つ数百台の特別のマシン上で走る大規模な訓練システムに及んでいる。

Page 181: 機械学習技術の現在+TensolFlow White Paper

o これほどの広い範囲のプラットフォームをまたぐ単一のシステムを持つことは、実世界でのマシン・ラーニング・システムの利用を大幅に単純化する。我々が見いだしたように、大規模な訓練用のシステムと小規模な配備といった別々のシステムを持つことは、メンテナンスに大きな負荷をもたらし、抽象のレベルでも漏れを引き犯しやすいからだ。TensorFlowの計算は、(第2節でもっと詳しく述べるが)状態を持ったデータフロー・グラフで表現される。我々は、システムが、研究目的で新しいモデルを素早く実験するのにも十分柔軟で、また、製品用のマシン・ラーニング・モデルの訓練と配備でも十分に高パフォーマンスで頑健でとなることにフォーカスしてきた。

Page 182: 機械学習技術の現在+TensolFlow White Paper

o ニューラル・ネットワークの訓練を大規模な配備にスケールさせるために、TensorFlowは、データフロー・グラフのコア・モデルのレプリケーションとパラレル実行を行うことで、クライアントが容易に沢山の種類のパラレル処理を表現することを可能にする。そこでは、多くの異なった計算デバイスが全て協調して、共有パラメータ、その他の状態の集合を更新する。計算の記述のあまり大きくない変更で、広い範囲の異なったアプローチのパラレル処理への移行が達成され、少ない労力でそれを試すことが可能になる。 [14, 29, 42].

Page 183: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowのある利用では、パラメーターの更新の整合性に関して、柔軟な対応が可能になる。大規模な配備のある場合には、我々は、こうした同期の条件の緩和を簡単に表現し、その利点を利用できる。 DistBeliefと比較すると、TensorFlowのプログラミング・モデルは、もっと柔軟であり、パフォーマンスははるかに良い。また、広い範囲の多様なヘテロなハードウェア・プラットフォーム上の広いモデルの訓練と利用をサポートしている。

Page 184: 機械学習技術の現在+TensolFlow White Paper

o 我々内部の数十のDistBeliefの利用者は、すでにTensorFlowへの切り替えを終えている。これらの利用者は、研究でも製品でもTensorFlowを信頼している。これらの仕事は、モバイル・フォーンでのコンピュータ・ビジョン・モデルのための推論の実行から、数百のマシンを用い数千億のサンプル・データ上で数千億のパラメーターを持つ大規模なディープ・ニューラル・ネットワークの訓練まで、多岐にわたっている。

Page 185: 機械学習技術の現在+TensolFlow White Paper

o これらのアプリケーションは、特に、マシン・ラーニングとディープ・ニューラル・ネットワークに集中しているのだが、我々は、TensorFlowの抽象が、他の種類のマシン・ラーニング・アルゴリズムや可能的には他の種類の数値計算を含む、他の多様な領域においても有用となることを期待している。我々は、TensorFlow APIと参照実装を 2015年の11月に、Apache 2.0ライセンスの下でオープンソースにしてきた。 www.tensorflow.org から利用可能である。

Page 186: 機械学習技術の現在+TensolFlow White Paper

o この論文の残りの部分では、もっと詳しくTensorFlowについて述べる。第2節は、TensorFlowインターフェースのプログラミング・モデルと基本的なコンセプトについて述べる。第3節は、単一のマシンと分散実装の双方について述べる。第4節は、基本的なプログラミング・モデルの拡張について述べる。第5節は、基本的な実装の 適化について述べる。第6節は、TensorFlowを使った我々の経験を述べる。第7節は、我々が見つけたTensorFlowを使うときに有用なイディオムについて述べる。第9節は、コアのTensorFlowの周辺で我々が構築した補助ツールについて述べる。第10節と第11節は、それぞれ将来と関連した仕事について述べる。第12節は、結論的な考えを提供している。

Page 187: 機械学習技術の現在+TensolFlow White Paper

2. プログラミング・モデルと基本的なコンセプト

p演算とカーネル

pセッション

p変数

Page 188: 機械学習技術の現在+TensolFlow White Paper

o TensorFlow の計算は、ノードの集合からなる有向グラフによって記述される。グラフは、データフロー計算を表現している。ただ、 Naiad [36] と同じようなスタイルで、ある種類のノードにパーシステントな状態の維持と更新を可能とし、また、グラフ内の分岐とループの制御構造を持つように拡張している。

Page 189: 機械学習技術の現在+TensolFlow White Paper

o クライアントは、典型的には、サポートされたフロントエンドの言語(C++ または Python)を利用して計算グラフを構築する。

o Pythonをフロントエンドに使ったTensorFlowグラフの構築と実行のサンプルの一部を図1に示す。図2は、結果としての計算グラフである。

Page 190: 機械学習技術の現在+TensolFlow White Paper

TensorFlowのコードとグラフのサンプルimport tensorflow as tf

b = tf.Variable(tf.zeros([100]))W = tf.Variable(tf.random_uniform([784,100],-1,1))x = tf.placeholder(name=“x”)relu = tf.nn.relu(tf.matmul(W, x) + b)C = [...]

s = tf.Session() for step in xrange(0, 10):

input = ...construct 100-D input array ...result = s.run(C, feed_dict={x: input})print step, result

Page 191: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowグラフでは、それぞれのノードは、ゼロ以上の入力とゼロ以上の出力を持ち、ある演算のインスタンスを表現している。グラフの中で、通常のエッジに沿って(入力から出力へ)流れる値はテンソルである。テンソルは、任意の次元を持つ配列で、それを構成する要素の型は、グラフ作成時に指定されるか推論される。

Page 192: 機械学習技術の現在+TensolFlow White Paper

o コントロール従属と呼ばれる特殊なエッジもグラフの中に存在できる。このエッジに沿ってはどんなデータも流れないが、コントロール従属の出発点のノードは、コントロール従属の終点のノードでの実行が始まる前に実行を終えていなければいけないことを示している。我々のモデルは、複製可能な状態を含んでいるので、コントロール従属は、関係の前に起きるべきことをクライアントが直接に強制するのに利用できる。我々の実装では、次のような場合にもコントロール従属を挿入することがある。例えば、メモリー使用のピークをコントロールする場合に、通常では独立な演算の間に順序を強制するような場合である。

Page 193: 機械学習技術の現在+TensolFlow White Paper

演算とカーネル

o 演算は名前を持っていて抽象的な計算を表現する(例えば、”matrix multiply”や “add”のように)。演算は、属性を持つことができる。この属性は、ノードが演算を実行するようにインスタンス化されるためには、グラフ構築時に与えられるか推論されなければならない。属性の、一つの共通な使い方は、テンソルの異なった要素の型の上に演算がポリモルフィックであるようにすることである(例えば、浮動小数点型の二つのテンソルを加算すると、int32型の二つのテンソルを加算するといった)。

Page 194: 機械学習技術の現在+TensolFlow White Paper

o カーネルは、特別なタイプのデバイス(例えば、CPUかGPUか)の上で実行可能な、特別な演算の実装のことである。TensorFlowのバイナリーは、演算と利用可能なカーネルの集合を、レジストレーションのメカニズムを通じて定義する。この集合は、追加の演算/カーネルの定義/レジストレーションとリンクすることで拡張できる。次のテーブル1は、コアなTensorFlowライブラリーに組み込まれている演算の一部である。

Page 195: 機械学習技術の現在+TensolFlow White Paper

TensorFlow の演算の型o 要素ごとの数学的演算

Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal, ...

o 配列の演算Concat, Slice, Split, Constant, Rank, Shape,Shuffle, ...

o 行列の演算MatMul, MatrixInverse, MatrixDeterminant, ...

o 状態を持つ演算Variable, Assign, AssignAdd, ...

Page 196: 機械学習技術の現在+TensolFlow White Paper

TensorFlow の演算の型o ニューラル・ネットワークの構成要素

SoftMax, Sigmoid, ReLU, Convolution2D,MaxPool, ...

o チェックポイント演算Save, Restore

o キューと同期の演算Enqueue, Dequeue, MutexAcquire,MutexRelease, ...,

o 制御の流れの演算Merge, Switch, Enter, Leave, NextIteration

Page 197: 機械学習技術の現在+TensolFlow White Paper

セッション

o クライアントのプログラムは、セッションを生成することでTensorFlowのシステムと相互作用する。計算グラフを生成するためにセッションのインターフェースは、 Extendメソッドをサポートしている。これによって、セッションによって管理されているグラフに追加のノードやエッジを増やす。(セッションによって生成される、一番 初のグラフは空である)

Page 198: 機械学習技術の現在+TensolFlow White Paper

o セッション・インターフェースによってサポートされている他の重要なオペレーションは、 Runである。Runは、計算される必要のある出力の集合の名前と、ノードのある種の出力の代わりにグラフに与えられるべきオプショナルなテンソルを引数に取る。Runの引数を利用することで、TensorFlowの実装は、要求されている出力を計算するために実行されるべきすべてのノードの推移的クロージャの計算が可能となる。また、その時、その従属性に応じて適切なノードを順番に実行するためのアレンジも可能になる。(詳しくは、3.1で述べる)

o 我々のTensorFlowの利用の大部分では、いったんグラフでセッションをセットアップすると、そのあとは、Runの呼び出しを通じて、グラフ全体あるいは少数の部分グラフを数千ないしは数百万回実行する。

Page 199: 機械学習技術の現在+TensolFlow White Paper

変数

o 大部分の計算では、一つのグラフは複数回実行される。大部分のテンソルは、グラフの一回の実行のあとにはいき残らない。しかし、変数は、グラフの実行を通じて生き残るパーシステントな複製可能なテンソルへのハンドルを返す特別な種類の演算である。これらのパーシステントな複製可能なテンソルへのハンドルは、 AssignやAssignAdd (+=に等しい)といった、参照されたテンソルを複製する少数の特別な演算に渡されることができる。TensorFlowのマシン・ラーニングのアプリケーションでは、そのモデルのパラメーターは、典型的には、変数に保持されたテンソルに格納され、モデルのグラフの訓練のRunの一部として更新される。

Page 200: 機械学習技術の現在+TensolFlow White Paper

3. 実装

Page 201: 機械学習技術の現在+TensolFlow White Paper

3. 実装o デバイス

o テンソル

o 3.1 単一のデバイスでの実行o 3.2 複数のデバイスでの実行o 3.2.1 ノードの配置o 3.2.2 デバイス間のコミュニケーションo 3.3 分散実行o 対障害性

Page 202: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowシステムの主要なコンポーネントはクライアントである。それは、セッション・インターフェースを使ってマスターと、さらに、一つ以上のワーカー・プロセスと通信する。それぞれのワーカー・プロセスは、一つ以上の計算デバイス(CPUコアとかGPUコアといった)へのアクセスの調停とマスターに指示されたデバイス上でのグラフ・ノードの実行に責任を持っている。

Page 203: 機械学習技術の現在+TensolFlow White Paper

o 我々は、ローカル実装と分散実装という、TensorFlowインターフェースの二つの実装を持っている。ローカル実装は、クライアント、マスター、ワーカーがすべて一つのマシン上で一つのOSのプロセスのコンテキストの中で走る。(可能的には、例えば、一つのマシンに沢山のGPUカードがインストールされていて、複数のデバイスの場合もある)。分散実装は、ローカル実装と大部分のコードを共有している。ただし、クライアント、マスター、ワーカーが、すべて異なるマシンの異なるプロセスでありうるような環境をサポートするように拡張されている。

Page 204: 機械学習技術の現在+TensolFlow White Paper

o 我々の分散環境では、これらの異なったタスクは、クラスター・スケジューリング・システム[51]. によって管理されたジョブの中のコンテナーである。これらの異なったモードを次の図3に示す。この節の残りの大部分は、両方の実装にとって共通な問題を議論している。3.3節は、分散実装に特有の問題を議論している。

Page 205: 機械学習技術の現在+TensolFlow White Paper

単一マシンと分散システムの構造

Page 206: 機械学習技術の現在+TensolFlow White Paper

デバイス

o デバイスは、TensorFlowの計算の心臓部分である。それぞれのワーカーは一つ以上のデバイスに責任を持っている。それぞれのデバイスは、デバイスの型と名前を持っている。デバイスの名前は、デバイスの型とワーカーの中でのデバイスのインデックスと、我々の分散設定では、ワーカーのジョブとタスクを指定するものから構成される。(プロセスに対してデバイスがローカルな場合には、localhostが用いられる)デバイス名の例は、次のようになる。"/job:localhost/device:cpu:0" "/job:worker/task:17/device:gpu:3".

Page 207: 機械学習技術の現在+TensolFlow White Paper

o 我々は、CPUとGPUについてのデバイス・インターフェースの実装を持っている。その他のデバイス型についての新しいデバイスの実装は、レジストレーションのメカニズムを通じて与えることができる。それぞれのデバイス・オブジェクトは、デバイスのメモリーの割り当てと解放、TensorFlow実装のより高いレベルで要求される任意のカーネルの実行のアレンジに責任を持っている。

Page 208: 機械学習技術の現在+TensolFlow White Paper

テンソル

o 我々の実装では、テンソルは、型付けられた多次元の配列である。我々は、多様なテンソル要素の型をサポートしている。8bitから64bitのサイズの、符号付・符号なしの整数。IEEEの浮動小数点と倍精度と複素数、文字列型(任意のバイト配列)がある。テンソルの格納場所の適切なサイズは、テンソルが存在するデバイス上で特有のアロケータ−によって管理される。テンソルの格納場所のバッファーは、参照数がカウントされ、参照が残ってないなら解放される。

Page 209: 機械学習技術の現在+TensolFlow White Paper

3.1 単一デバイスでの実行o 初に、一番簡単な実行シナリオ、すなわち、一つのデバイスを持った単一のワーカー・プロセスをを考えてみよう。グラフのノードは、ノード間の従属性を尊重するように、順に実行される。特に、まだ実行されていないノードの従属性の数を、我々は、ノード毎にカウントし追跡している。いったん、このカウントがゼロに落ちると、そのノードは実行に適格とみなされ、準備OKのキューに追加される。この準備キューは、時には特定されない順番で処理されることがある。ノードのデバイス・オブジェクトに対してカーネルの実行が特別に指定されることがあるのだ。ノードは、実行が終わると、終了したノードに依存している全てのノードのノードのカウントを一つ減らす。

Page 210: 機械学習技術の現在+TensolFlow White Paper

3.2 複数のデバイスでの実行o システムが複数デバイスの場合、主に二つほど厄介なことがある。一つは、グラフ上のそれぞれのノードについてどのデバイスを実行配置につかさせるかを決定することであり、もう一つは、その後で、この配置決定によって導かれるデバイスの境界をまたいで要求されるデータ通信を管理することである。

Page 211: 機械学習技術の現在+TensolFlow White Paper

3.2.1 ノードの配置o 計算グラフが与えられた時、TensorFlow実装の主要な責任は、計算を利用可能なデバイスの上に対応づけることである。このアルゴリズムの単純なバージョンを以下に述べる。このアルゴリズムでサポートされた拡張については4.3節を参照のこと。

Page 212: 機械学習技術の現在+TensolFlow White Paper

o 配置アルゴリズムへの一つの入力は、コスト・モデルである。それは、それぞれのグラフ・ノードに対しての入力と出力のサイズ(バイト数での)の評価を含んでいる。さらに、入力テンソルが与えられた時、それぞれのノードに要求される計算時間の評価が行われる。このコスト・モデルは、ある場合には、異なる演算のタイプに関連したヒューリスティックに基づいて静的に評価され、ある場合には、以前のグラフの実行での実際の配置決定の集合に基づいて計測される。

Page 213: 機械学習技術の現在+TensolFlow White Paper

o 配置アルゴリズムは、 初に、そのグラフ実行のシミレーションを走らせる。このシミレーションは以下に述べるが、グラフ中のそれぞれのノードについて、 greedy heuristics を使って一つのデバイスを選択して終わる。このシミレーションで生成された、ノードのデバイスへの配置は、実際の実行での配置でも利用される。

Page 214: 機械学習技術の現在+TensolFlow White Paper

o 配置アルゴリズムは、計算グラフの出発点から始まり、進行につれてシステムのそれぞれのデバイス毎に活動をシミレートする。この横断によって到達されるそれぞれのノードで、可能性のあるデバイスが検討される。(あるデバイスは、もしもそのデバイスで特定の演算を実装したカーネルが提供されていないならば、可能性を持たないことになるかもしれない)。複数の可能性を持つデバイスを持つノードについては、配置アルゴリズムはgreedy heuristic 経験的総当り法を用いる。それは、可能なデバイス全てについて、そのノードに配置した時に、ノードの実行完了時間への影響を検査する。

Page 215: 機械学習技術の現在+TensolFlow White Paper

o この経験的方法は、コスト・モデルから評価あるいは計測されたこのデバイスのタイプの実行時間を考慮に入れる。同時に、他のデバイスから想定されたデバイスに対してこのノードに入力を送るために必要とされる全ての通信コストが含められる。

Page 216: 機械学習技術の現在+TensolFlow White Paper

o ノードの演算が も早く終わるであろうデバイスが、その演算のデバイスとして選ばれる。そして配置のプロセスはグラフの中の他のノードの配置決定へと前進を続ける。その一方で下流のノードたちは、自身のシミレーション実行の準備を整える。4.3節は、ユーザーに配置アルゴリズムを導くヒントや部分的な制約条件を与えることを可能にするいくつかの拡張について述べている。配置アルゴリズムは、システム内で開発が進行中の領域である。

Page 217: 機械学習技術の現在+TensolFlow White Paper

3.2.2 デバイス間通信o いったんノードの配置が計算されると、グラフはデバイスごとに部分グラフの集合に分割される。xからyへの全てのデバイスをまたぐエッジは削除され、xからxの部分グラフ内の新しいSendノードへのエッジに、また、対応するReceiveノードからyの部分グラフ内のyへのエッジに置き換えられる。このグラフの変形については、図4を見てほしい。

Page 218: 機械学習技術の現在+TensolFlow White Paper

Send/Receive ノードの挿入の前後

Page 219: 機械学習技術の現在+TensolFlow White Paper

o 実行時は、SendとReceiveの実装は、デバイス間のデータ転送のために協調して動作する。このことは、SendとReceiveの実装の内部の通信を全て隔離することを可能にし、実行時の他の部分を簡単にする。

Page 220: 機械学習技術の現在+TensolFlow White Paper

o SendとReceiveノードを挿入した時、我々は、特定のデバイス上の特定のテンソルの全ての利用者は、特定のデバイスの下流の利用者ごとに一つのReceiveノードではなく、単一のReceiveノードを利用するように正規化する。このことによって、必要なテンソルのデータは、一度だけ、出発点のデバイスから終点のデバイスのペアに送信されることが保証される。終点のデバイス上のそのテンソルのメモリーは、複数回ではなく一度だけ割り当てられる。(例えば、図4でのノード b, c を見よ)

Page 221: 機械学習技術の現在+TensolFlow White Paper

o こうした仕方で通信をハンドルすることで、異なったデバイス上のグラフの個々のノードのスケジューリングを、ワーカーへと分散化することが可能となる。すなわち、SendとRceiveのノードは、異なったワーカーとデバイス間で必要な同期を自ら行うので、マスターは、それぞれのワーカーに対して、ワーカーがグラフのどんなノードを持っていたとしても、グラフ実行の度に一つのRunリクエストを発行する必要があるだけである。全てのノード間、あるいは、全てのデバイス間の通信のスケジューリングに、マスターが巻き込まれることはない。このことは、システムをもっとスケーラブルなものにし、スケジューリングがマスターによって強制的に行われるよりも、細かな粒度でのノードの実行が可能になる。

Page 222: 機械学習技術の現在+TensolFlow White Paper

3.3 分散実行o グラフの分散実行は、複数のデバイスでの実行に、とてもよく似ている。デバイスの配置後に、デバイスごとに部分グラフが生成される。ワーカープロセスをまたいで通信するSend/Receiveノードのペアは、マシン境界をまたいでデータを移動するのに、TCPまたはRDMAといったリモート通信のメカニズムを利用する。

Page 223: 機械学習技術の現在+TensolFlow White Paper

耐障害性

o 分散実行での失敗は、様々なところで検出が可能である。我々が依拠している主要なものは、(a) SendとReceiveノードペア間での通信の失敗(b) マスタープロセスから全てのワーカープロセスへの定期的な健康チェックである。

o 失敗が検出されると全てのグラフ実行は中断され、 初から処理が始められる。ただし、変数ノードは、グラフの実行をまたいでパーシステントであるので、テンソルを参照していることに注意。

Page 224: 機械学習技術の現在+TensolFlow White Paper

o 我々は、整合的なチェックポイントと再起動時にその状態から回復することをサポートしている。特に、それぞれの変数ノードは、Saveノードに接続されている。これらのSaveノードは、定期的に、例えばN回の繰り返しの後一度とかN分ごとに一度とか、実行される。これが実行されると、変数の内容は、例えば分散ファイルシステムのような、パーシステントなストレージに書き出される。同様に、全ての変数ノードは、再起動後の 初の繰り返しでのみ利用可能なRestoreノードに接続されている。4.2節に、どのようにして、あるノードでグラフのある実行のみが可能になるかについて詳しく触れている。

Page 225: 機械学習技術の現在+TensolFlow White Paper

4 拡張

この節では、2節で導入された基本的なプログラミング・モデルの、さらに進んだいくつかの特徴について述べる。

Page 226: 機械学習技術の現在+TensolFlow White Paper

4 拡張o 4.1 勾配計算o 4.2 部分的な実行o 4.3 デバイスの制約条件o 4.4 制御の流れo 4.5 入力演算o 4.6 キューo 4.7 コンテナー

Page 227: 機械学習技術の現在+TensolFlow White Paper

4.1 勾配計算o 多くの 適化アルゴリズムは、マシン・ラーニングの訓練アルゴリズムでよく使われている確率的な勾配降下法[45]を含めて、入力の集合に対するコスト関数の勾配の計算が行われる。こうした計算へのニーズはとても高いので、TensorFlowでは、自動的な勾配計算を組み込みでサポートしている。もしも、あるTensorFlowのグラフの中のテンソルCが、おそらくは複雑な計算を通じて、あるテンソルの集合{Xk}に従属しているのなら、組み込み関数は{dC/dXk}を返すだろう。勾配テンソルは、他のテンソルと同じように、次のような手続きを持ちいてTensorFlowグラフを拡張することで計算される。

Page 228: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowが、テンソルCの、Cが依存しているあるテンソルIについての勾配を計算する必要があったとしよう。まず 初に、計算グラフの中でIからCへの経路を見つける。それから、CからIへと逆向きに辿る。そしてTensorFlowのグラフに対して、この逆向きの経路上の全ての演算にノードを追加する。チェイン・ルール(結合ルール)を利用して逆向きの経路にそって部分的な勾配を構成する。新しく追加されたノードは、もとの前向きの経路で対応する演算の「勾配関数」を計算する。勾配関数は、いずれかの演算によって登録されているかもしれない。

Page 229: 機械学習技術の現在+TensolFlow White Paper

o この関数は入力として、逆方向の経路に沿ってすでに計算された部分的な勾配を取るだけでなく、オプションとして順方向の演算の入力と出力を取る。図5は、図2の例で、コストに対する勾配を計算している様子を示している。灰色の矢印は、特定の演算については利用されなかった勾配関数へのオプションとして可能な入力を表している。図1に対する追加で必要なことは、次のような勾配を計算することである。

[db,dW,dx] = tf.gradients(C, [b,W,x])

Page 230: 機械学習技術の現在+TensolFlow White Paper

図2のグラフで計算される勾配

Page 231: 機械学習技術の現在+TensolFlow White Paper

o 一般的に、演算は複数の出力を持つ。Cは、それらの幾つかにだけ依存しているのかもしれない。例えば、演算Oは二つの出力 y1とy2を持っていて、Cはy2のみに依存しているとしよう。この時Oの勾配関数への 初の入力は0 にセットされる。なぜなら、dC/dy1 = 0 だから。

o 自動的な勾配計算は、 適化、特にメモリー利用の 適化を複雑なものにする。「前向き」に計算の部分グラフを実行している時、すなわち、それはユーザーによって明示的に構成されたものなのだが、グラフが構成された順序を観察することでどのノードが次に実行されるかを決定するという意味のある経験則は、うまく働かない。

Page 232: 機械学習技術の現在+TensolFlow White Paper

o このことは、一般的には次のことを意味する。一時的な出力は構成されてただちに消費されるので、そのメモリーはすぐに再利用される。経験則が効率的でない時には、ユーザーはグラフの構築の順序を変えたり、第5節で述べるようにコントロール従属を追加できる。勾配ノードが自動的にグラフに追加される時には、ユーザのコントロールは小さいものになり、経験則も効かなくなる。特に、勾配は前向きの計算順序をひっくり返すので、勾配計算の 後のあたりで、グラフの実行で以前に使われていたテンソルが、再び必要になることがしばしば起きる。

Page 233: 機械学習技術の現在+TensolFlow White Paper

o こうしたテンソルは、乏しいGPUのメモリーを大量に押さえて、計算のサイズを不必要に制限する可能性がある。我々は、こうした場合をよりよく扱うことのできる改良のために積極的に働いている。それらには、次のものが含まれている。グラフ実行の順序を決めるもっと洗練された経験則、テンソルをメモリーに保持するのではなく再計算すること、 長生きなテンソルをGPUメモリーからもっと大量にあるホストCPUのメモリーにスワップすること。

Page 234: 機械学習技術の現在+TensolFlow White Paper

4.2 部分的な実行o クライアントは、実行グラフの全体ではなく、部分グラフだけを実行したいことがよくある。これをサポートするために、クライアントがセッションに計算グラフを一度セットアップすれば、Runメソッドが全体のグラフの任意の部分グラフを実行することを可能にする。また、グラフのエッジに沿って任意のデータを挿入できるし、グラフの中のどんなエッジにそって流れるデータも取り出すことができる。

o グラフの中のそれぞれのノードは名前を持っている。そして、ノードのそれぞれの出力は、ソース・ノードの名前と0から番号付けられた出力ポートで同定される。(例えば、”bar:0”は、”bar”ノードの 初の出力を指し、”bar:1”は、二番目の出力を指す。等々。)

Page 235: 機械学習技術の現在+TensolFlow White Paper

o Run呼び出しの二つの引数が、計算グラフの実行されるべき正確な部分グラフを定義するのを助けることができる。第一に、Run呼び出しは、 “name:port”という名前でテンソルの値を与えられたオプショナルなマッピングを、入力として受けつける。第二に、Run呼び出しは、output_namesを受け取る。それは、出力の名前[:port]で指定されたリストで、どのノードが実行されるべきかを示している。もしもport部分が名前にあれば、Run呼び出しが成功裏に終わった時、そのノードの特別な出力テンソルの値がクライアントに返されるべきである。

Page 236: 機械学習技術の現在+TensolFlow White Paper

o グラフは、入力と出力に与えられた値を元に変形される。入力で指定されたnode:portは、feedノードに置き換えられる。それは、Run呼び出しで利用されるRendezvousオブジェクトの特別に初期化されたエントリーから、与えられた入力テンソルをピックアップするだろう。同様に、それぞれのポート付きの出力の名前は、特別のFetchノードに接続される。それは、出力テンソルを保存のために整理して、Run呼び出しが終了した時、クライアントにそれを返す。 終的には、グラフがこれらの特別なfeed, fetchノードの挿入で書き換えられた時、

Page 237: 機械学習技術の現在+TensolFlow White Paper

o 実行するノードの集合は、次のようにして決定される。全ての出力で名前が付けられた全てのノードからスタートして、グラフの従属性を利用してグラフを逆向きに進んで、書き換えられたグラフの中で出力を計算するために、必ず実行されるべきノードの完全な集合を決める。図6は、元のグラフが左側にある。変形されたグラフは、入力=={b} で、出力=={f:0}で、Runが呼び出された時の結果である。我々は、ノードfの出力の計算のみが必要なので、ノードd や e を実行しない。なぜなら、それらはfの出力には寄与していないからである。

Page 238: 機械学習技術の現在+TensolFlow White Paper

4.2 Partial Execution

Page 239: 機械学習技術の現在+TensolFlow White Paper

4.3 デバイスの制約条件o TensorFlowのクライアントは、ノードについて、どのデバイスが実行可能かについての部分的な制約条件を与えることで、デバイス上のノードの配置をコントロールできる。例えば、”このノードは、GPUタイプのデバイス上にのみ置くこと” とか “このノードは、 /job:worker/task:17 内の任意のデバイス上に置くことができる” とか “このノードは、variable13 という名前のノードと同じマシン上に置くこと” 等々。

Page 240: 機械学習技術の現在+TensolFlow White Paper

o こうした制約条件の範囲の中で、配置アルゴリズムはノードのデバイスへの割り当ての選択に責任を持っている。それは、計算の高速な実行を提供し、グラフノードのサブセットを実行するためにデバイス上で必要とされるメモリーの総量を制限するといったような、デバイス自身によって課せられた、様々な制約条件を満たす。

Page 241: 機械学習技術の現在+TensolFlow White Paper

o こうした制約条件を想定することは、3.2.1節で述べた配置アルゴリズムの変更を要求する。我々は、まず、それぞれのノードにとって可能なデバイスの集合を計算し、ついで、グラフのcollocationの制約条件にunion-findのアルゴリズムを使って、一緒に配置されるべきグラフの要素を計算する。こうした要素全てについて、可能なデバイスの集合の共通部分を計算する。ノードごとに計算された可能なデバイスの集合は、容易に、配置アルゴリズムのシミレーターに適合する。

Page 242: 機械学習技術の現在+TensolFlow White Paper

4.4 Control Flowo いかなる明示的な制御の流れの構造を持たないデータフロー・グラフは、非常に表現力が高いのだが、条件式やループがサポートされている方が、もっと簡潔で効率的なマシン・ラーニング・アルゴリズムの表現へと導く多くのケースを観察してきた。

Page 243: 機械学習技術の現在+TensolFlow White Paper

o 多くは、Arvind [3]で記述されたデータフロー・マシンのアプローチと同じように、我々は、プリミティブなコントロール・フローの小さなセットをTensorFlowに導入し、TensorFlowをサイクルを持つグラフもハンドルできるように一般化した。SwitchとMergeの演算は、ブール値を持つテンソルの値に基づいて、ある部分グラフ全体の実行をスキップすることを可能にする。Enter, Leave, NextIteration 演算は、繰り返しを表現することを可能にする。高級言語での、if 条件式や while ループは、こうしたコントロール・フロー演算を持つデータフロー・グラフに、簡単にコンパイルされうる。

Page 244: 機械学習技術の現在+TensolFlow White Paper

o TensorFlow のランタイムは、タグとフレームの概念を実装している。概念的には、 MIT Tagged-Token machine [4] に似ている。ループの繰り返しはタグによってユニークに名前が与えられ、その実行状態はframeで表現される。入力は、それが利用可能になった時いつでも繰り返しに入ることができ、こうして複数の繰り返しがコンカレントに実行されうる。

Page 245: 機械学習技術の現在+TensolFlow White Paper

o TensorFlow は、コントロール・フローを持ったグラフを実行するのに、分散協調メカニズムを利用する。一般的に言って、ループは、沢山のことなったデバイスに割り当てられたノードを含むことができる。それゆえ、ループの状態を管理することは、分散終了検出の問題になる。TensorFlowのソリューションは、グラフの書き換えに基づいている。グラフの分割の間に、我々は自動的にその分割された部分のそれぞれにコントロール・ノードを追加する。これらのノードは、小さな状態マシンを実装していて、それぞれの繰り返しの開始と終了をオーケストレートし、ループの終了を決定する。それぞれの繰り返しで、ループの終了条件を所有するデバイスは、全ての参加しているデバイスに小さなコントロール・メッセージを送る。

Page 246: 機械学習技術の現在+TensolFlow White Paper

o 以上で説明したように、我々は、しばしば、マシン・ラーニング・モデルを勾配降下法で訓練する。そして、勾配の計算をデータフロー計算の一部として表現する。モデルがコントロール演算を含む時、我々はモデルに対応する勾配計算について説明する必要がある。例えば、if条件式を持ったモデルは、この分岐に勾配のロジックを適用する時に、条件のどの分岐が取られたかを知る必要がある。同様に、While-loopを持ったモデルの勾配計算では、何回の繰り返しが行われたかを知る必要があり、これらの繰り返しの間に計算された中間の値にも依拠する必要がある。基本的なテクニックは、グラフを書き換えて勾配計算に必要な値を記憶することである。この幾分複雑なコードの詳細については割愛した。

Page 247: 機械学習技術の現在+TensolFlow White Paper

4.5 入力演算o 計算への入力データは、feedノードによって与えられるのだが、大規模なマシン・ラーニング・モデルの訓練で、よく用いられるもう一つのメカニズムは、グラフの中に、特別な入力演算ノードを持つことである。それは典型的にはファイル名の集合で設定されて、それが実行されるたびにファイルの集合に格納されたデータから、一つまたはそれ以上のサンプルを含んだテンソルを生み出す。このことで、配下のストレージ・システムから、直接にマシンのメモリーにデータを読み込むことが可能になる。マシンは、引き続いて、そのデータ上で処理を実行する。

Page 248: 機械学習技術の現在+TensolFlow White Paper

o 設定の段階では、クライアントのプロセスはワーカーのプロセスから切り離されている。もしもデータが与えられた時には、典型的には、余分なネットワークのホップが必要になるかもしれない。(ストレージ・システムからクライアントへ、クライアントからワーカーへ。それに対して、入力ノードを使う場合には、ストレージ・システムから、直接、ワーカーにいく)

Page 249: 機械学習技術の現在+TensolFlow White Paper

4.6 キューo キューは、我々がTensorFlowに追加した、有用な特徴である。それは、グラフのことなった部分を、非同期に実行することを可能にする。可能的には、ことなったリズムでの実行も。また、Enqueue, Dequeue演算を通じてデータを手放すことも可能である。 Enqueue 演算は、キューの中でスペースが利用可能になるまでブロックされ、Dequeue 演算では、キューの中で期待される際少数の要素が利用可能になるまでブロックされる。

Page 250: 機械学習技術の現在+TensolFlow White Paper

o キューの一つの使い方は、以前に投入されたバッチ・データが、マシン・ラーニング・モデルの一部で、引き続き処理中であっても、入力データのディスク・ファイルからの先読みを可能にすることである。 キューはまた、大規模なバッ

チ処理で、より複雑な勾配の組み合わせを計算するために、たくさんの勾配を蓄積するような、データのグルーピングにも、リカレント言語モデルで、様々に異なった入力文を、処理を効率的に行うために、ほぼ同じ長さの文をまとめてグルーピングするさいの置き場としても利用される。

Page 251: 機械学習技術の現在+TensolFlow White Paper

o 通常のFIFOキューに加えて、我々は、シャフリング・キューも実装した。これは、その要素を大きなメモリー上のバッファーでランダムにシャッフルするものである。このシャフリングの機能は、マシン・ラーニングのアルゴリズムにとって、例えば、サンプルを処理する際にその順序をランダムに変えたい時に役に立つ。

Page 252: 機械学習技術の現在+TensolFlow White Paper

4.7 コンテナーo コンテナーは、TensorFlowの内部で長時間にわたって生き続ける複製可能な状態を管理するためのメカニズムである。Variableの保存場所は、コンテナーの中にある。デフォールトのコンテナーは、プロセスが終了するまで永続する。ただ、我々は、他の名前を持つコンテナーも認めている。

o コンテナーは、その内容を完全にクリアすることでリセットされうる。コンテナーを使うことで、異なるセッションに関連付けられた完全に分離されている計算グラフをまたいでさえも、状態を共有することは可能である。

Page 253: 機械学習技術の現在+TensolFlow White Paper

5 適化

この節では、パフォーマンスとシステムのリソースの利用を改善する、TensorFlow実装での幾つかの適化について述べる。

Page 254: 機械学習技術の現在+TensolFlow White Paper

5 適化

o 5.1 共通の部分表現の削除o 5.2 データ通信とメモリー使用をコントロールするo 5.3 非同期カーネルo 5.4 カーネル実装での 適化ライブラリー

o 5.5 損失のある圧縮

Page 255: 機械学習技術の現在+TensolFlow White Paper

5.1 共通の部分表現の削除o 計算グラフの構築は、クライアント・コードでは、多くの異なった抽象のレイヤーで行われるので、計算グラフは、容易に同じ計算の冗長なコピーを含むことになる。この問題をハンドルするために、 Click [12] で記述されたのと似たアルゴリズム、共通部分表現パスを実装した。これは、計算グラフ上で走って、同じ入力と同じ演算の型を持つ複数の演算のコピーを、ただ一つに正規化する。そして、この正規化を反映するように、エッジを適切にリダイレクトする。

Page 256: 機械学習技術の現在+TensolFlow White Paper

5.2 データ通信とメモリー使用をコントロールする

o TensorFlow演算の注意深いスケジューリングは、特にデータ転送とメモリー利用に関しては、システムのより良いパフォーマンスに結果する。特に、スケジューリングはその間、演算間の中間結果がメモリーに保持される時間枠と、それゆえ、ピーク時のメモリー消費をを削減できる。この削減は、メモリーが乏しいGPUデバイスでは特に重要である。さらに、デバイスをまたいだデータ通信の協調はネットワーク・リソースにとって、衝突を削減する。

Page 257: 機械学習技術の現在+TensolFlow White Paper

o スケジューリングの 適化には多くの好機があるのだが、ここでは我々は、特に必要で効果的なものであると我々が見出したものにフォーカスする。それは、リモートの値を読むReceiveノードのスケジューリングに関係している。もし、何も事前の警告がなかったとすると、これらのノードは、必要になるずっと前から開始される。可能的には実行がスタートした時に一斉に。 ORの世界ではよく知られている、可能な限り限り早く,可能な限り遅くという(ASAP/ALAP) 計算を実行した。我々は、いつReceiveノードをスタートさせるべきかを評価するためにグラフのクリティカルな経路を分析した。その後、その結果が必要になるその直前までこれらのノードのスタートを遅らせるという狙いをもって、コントロール・エッジを挿入した。

Page 258: 機械学習技術の現在+TensolFlow White Paper

5.3 非同期カーネルo Computeメソッドの 後に実行を終了させる、通常の同

期型のカーネルに加えて、我々のフレームワークは、ブロックしないカーネルもサポートしている。こうしたノンブロッキングなカーネルは、 Computeメソッドは、カーネルの実行が終わった時に起動すべきcontinuationを渡されるという点で、少し違ったインターフェースを利用している。これは、沢山のアクティブなスレッドが走っていて、メモリーの使用やその他のリソースの点で、比較的に高価である環境への 適化である。これによって、IOや他のイベントが起きるのをひたすら待つ間、実行スレッドを際限のない時間、縛り付けるのを避けることを可能にする。

Page 259: 機械学習技術の現在+TensolFlow White Paper

o 非同期カーネルの例としては、Receive カーネルとEnqueue, Dequeue カーネルがある。 (もし、キューのスペースに空きがない場合や、読まれるべきデータがない場合には、ブロックする必要があるのだが)

Page 260: 機械学習技術の現在+TensolFlow White Paper

5.4 カーネル実装の 適化ライブラリー

o 我々は、ある演算のカーネルについては、既存の高度に適化された数値計算ライブラリーを、しばしば利用している。例えば、異なったデバイス上で行列の掛け算を行う適化されたライブラリーは多数存在している。 BLAS

[15], cuBLAS [39] がある。ディープ・ニューラル・ネットワークでのコンボリューションの為のGPUライブラリーとしては、 cuda-convnet [28] や cuDNN [9] がある。我々のカーネル実装の多くは、こうした 適化されたライブラリーへの比較的薄い層からなるラッパーである。

Page 261: 機械学習技術の現在+TensolFlow White Paper

o 我々は、システムのカーネル実装の多くで、オープンソースの Eigen linear algebra library [25]を、かなり積極的に利用している。TensorFlow開発の一部として、我々のチームは( Benoit Steinerを中心とする)、オープンソースのEigenライブラリーを、任意の次元のテンソル操作をサポートするように拡張してきた。

Page 262: 機械学習技術の現在+TensolFlow White Paper

5.5 損失のある圧縮o 幾つかのマシン・ラーニング・アルゴリズムは、典型的には、ニューラル・ネットワークを訓練する為に利用されるのだが、ノイズや計算精度の低下に耐性を持っている。DistBelief system [14] と同じようなやり方で、我々は、デバイス間でデータを送る時(時には同じマシン内でも。ただ、本質的に重要なのは、マシン境界越える時なのだが)、高い精度の内部での表現に損失のある圧縮をかけて利用した。

Page 263: 機械学習技術の現在+TensolFlow White Paper

o 例えば、我々は、32bit浮動小数点表現を16bit浮動小数点表現に変換する特別の変換ノードを、しばしば挿入した。(IEEEで提案されている16bit浮動小数点の標準ではなく、 32-bit IEEE 794 で、少数部分が16bit少ないもの) そして通信チャンネルの反対側では、元の32bitに戻される。(小数部分の失われた部分に0を詰めるだけだ。というのも、32 → 16 → 32bitの変換を行う時に、数学的に正しい確率的な丸め込みを行うよりも、このやり方のほうが、計算的には安上がりだからだ)

Page 264: 機械学習技術の現在+TensolFlow White Paper

6 現状と経験

Page 265: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowのインターフェースと参照実装は、Apache 2.0ライセンスの元でオープンソース化されてきた。このシステムは、 www.tensorflow.orgからダウンロード可能である。このシステムは詳細なドキュメントと沢山のチュートリアルと、多様な異なったマシン・ラーニングの仕事で、どのようにこのシステムを利用するのかを示す沢山のデモのサンプルを含んでいる。サンプルには、MNISTデータセットから手書き数字を分類するモデル(マシン・ラーニング・アルゴリズムの“hello world”だ) [32]、CIFAR- 10 データセットから画像を分類するもの [30]、recurrent LSTM [22] ネットワークを使って言語モデルを作るもの、語のベクトル空間への埋め込みを行うものなどが含まれている。

Page 266: 機械学習技術の現在+TensolFlow White Paper

o システムは、TensorFlowの計算を、PythonとC++で指定するフロントエンドを含んでいる。我々は、時間が経つにつれ、Google内部のユーザーとより広いオープンソース・コミュニティの双方の願いに応えて、他のフロントエンドが追加されることを期待している。

o 我々の以前のDistBelief システム [14] では、ごく少数のマシン・ラーニング・モデルを持つだけだった。われわれはそれをTensorFlowに移植した。この節の残りの部分は、我々が学んだ教訓について述べようと思う。こうしたマシン・ラーニング・モデルの一つのシステムから他のシステムへの移植の教訓は一般化可能なもので、それゆえ、他の人たちにとっても価値があるだろう。

Page 267: 機械学習技術の現在+TensolFlow White Paper

o 特に、我々は、 Inception [23]と名付けられた、 先端

の画像認識の為のコンボリューション・ニューラル・ネットワーク移植の教訓にフォーカスする。この画像認識のシステムは、224 x 224 ピクセルのイメージを1000のラベル(例えば、 “cheetah”, “garbage truck”といった)の中の一つに分類する。こうしたモデルは、1,360万の学習可能なパラメーターと、TensorFlowのグラフで表現した時、36,000個の演算ノードからなる。一つの画像について推論するのに、20億回の掛け算・足し算が必要になる。

Page 268: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowで、すべての必要な数学的演算を構築した後で、その36,000個すべての演算を正しいグラフ構造へと組み合わせ、デバッグするのは、チャレンジングであることが証明された。システムの正しさを検証するのは難しい事業である。なぜなら、このシステムは本質的に確率的であり、我々は、システムが、潜在的な可能性としては数時間もの計算のあとで、ある種の仕方で期待にそうように振る舞うこと意図しているだけだからである。これらの環境のもとで、我々は、次のような戦略がInceptionモデルのTensorFlowへの移植では本質的に重要であることを見出した。

Page 269: 機械学習技術の現在+TensolFlow White Paper

o 1. 与えられたモデルのパラメーターの数の正確な洞察が得られるツールを構築すること。このようなツールは、 複雑なネットワーク・アーキテクチャの仕様のもとでは、微妙な欠陥があることが示された。特に、次元を超えた数学的演算では自動的にブロードキャストが行われるせいで、我々は、演算とインスタンス化された変数とを誤って同じものとみなすことができてしまった。

Page 270: 機械学習技術の現在+TensolFlow White Paper

o 2. 小さくスタートして、スケールアップする。我々が、以前のシステムから 初に移植したのは、 CIFAR-10 データセット [30]上の小さなネットワークであった。こうした小さなネットワークをデバッグすることは、もっと複雑なモデルでは、実践的には解読できないものであったマシン・ラーニング・システムの内部で、個別の演算(例えば、max-pooling)の微妙で特徴的なケースを明確にする。

Page 271: 機械学習技術の現在+TensolFlow White Paper

o 3. マシン・ラーニング・システムの間で、学習がなされていない時に、常に目的とするもの(損失関数)が一致することを保証すること。学習率をゼロにすることは、モデルの中ではいかにランダムに変数を初期化していたとしても、予期せぬ振る舞いを同定することを助ける。こうしたエラーは、動的な訓練ネットワークの中では、見つけるのが難しい。

Page 272: 機械学習技術の現在+TensolFlow White Paper

o 4. 分散実装のデバッグの前に、単一マシンでの実装が、一致するようにすること。この戦略はマシン・ラーニング・システム間の訓練パフォーマンスの不一致を明確に記述しデバッグするのを助けた。特に、競合する条件とアトミックでない演算を誤ってアトミックであるとみなしたことに起因するバグを同定した。

Page 273: 機械学習技術の現在+TensolFlow White Paper

o 5. 数値計算のエラーからシステムを守ること。数値計算ライブラリーは、いかにそれが有限ではない浮動小数点の値を扱ったとしても、矛盾を含む。コンボリューション・ニューラル・ネットワークは、特に、数値の不安定性に敏感である。そして、実験・デバッグのフェーズで、きわめて規則的に発散する傾向を持つ。非有限な浮動小数点値をチェックすることで、こうした振る舞いからシステムを守ることは、後になって発散の振る舞いを発見するのにたいして、リアルタイムにエラーを検出することを可能にする。

Page 274: 機械学習技術の現在+TensolFlow White Paper

o 6. ネットワークの諸部分を解析して、数値エラーの大きさを理解すること。ニューラル・ネットワークのいくつかの断片を二つのマシン・ラーニング・システムでパラレルに走らせることは、二つのシステム間で数値アルゴリズムが同一であることを保証する正確な方法を提供する。こうしたアルゴリズムが、浮動小数点の精度で実行されたとしよう。与えられたコンポーネントが正しく実装されているかを判断するために、期待される数値エラーの大きさを予想し理解することは重要である。(例えば、「1e-2 以内だ。すごいぞ!」と 「1e-2以内だ。なんでこんなに不正確なんだろう?」 とを区別すること)

Page 275: 機械学習技術の現在+TensolFlow White Paper

o 本質的に確率的なシステムを目の前にしながら、複雑な数学的演算の検証を行うのは、本当にチャレンジングなことである。以上で述べた戦略は、システムの中で、本質的には、InceptionモデルをTensorFlowにインスタンス化する中で確信をえた貴重なものだと証明されたものだ。こうした努力の 終結果は、同じモデルの既存のDistBeliefでの実装に対して、訓練時間の6倍の改善として結実した。こうしたスピードの獲得は、さらに大きな画像認識モデルの新しいクラスでの訓練にとって、欠くべからざるものであることが証明された。

Page 276: 機械学習技術の現在+TensolFlow White Paper

7 よく使われるプログラミング・イディオム

pデータ・パラレルな訓練

pモデル・パラレルな訓練

pモデル計算のパイプラインのための並行ステップ

Page 277: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowの基本的なデータフロー・グラフ・モデルは、マシン・ラーニング・アプリケーションで多様な方法で利用されうる。我々が関心を持つ一つの領域は、大規模なデータセット上での多くの計算が必要とされるニューラル・ネットワーク・モデルの訓練のスピードアップである。この節では、スピードアップを達成するために、我々や他の人たちが開発してきたいくつかのテクニックについて述べ、こうした様々のアプローチを実現するために、どのようにTensorFlowを利用するかを示す。

o 以下のサブセクションでは、モデルは確率的勾配降下法(SGD)を用いて訓練され、ミニバッチが100から1000の比較的中程度のものと装蹄している。

Page 278: 機械学習技術の現在+TensolFlow White Paper

データ・パラレルな訓練

o SGDをスピードアップする も単純なテクニックは、ミニ

バッチ要素間をまたぐミニバッチの勾配計算をパラレル化することである。例えば、1000要素のサイズのミニバッチを使っていたとすると、モデルの10個のレプリカを使って、その各々に100要素の勾配を計算させることができる。その後、あたかも、1000要素のサイズのバッチを持つシーケンシャルなSDGアルゴリズムの実行のように正確に振る舞うために勾配を結合して、パラメーターを同期して更新をかける。この場合では、TensorFlowのグラフは、単純に、グラフの一部がたくさんのレプリカを持つだけである。それが、大量のモデル計算を行う。この大規模なグラフの訓練用のループ全体をクライアントの単一のスレッドがドライブしている。図7の上の図が、これを図示している。

Page 279: 機械学習技術の現在+TensolFlow White Paper

同期型と非同期型のデータ・パラレルな訓練

Page 280: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowのグラフが、多数の部分グラフのレプリカを持ち、それが大量のモデル計算をおこなうというこのアプローチは、これらのレプリカの一つ一つが、モデルのパラメーター更新も非同期に行うことで、非同期に行われることも可能である。こうした設定では、それぞれのグラフのレプリカに、一つのクライアントのスレッドがあることになる。これは、図7の下の図で示されている。この非同期なアプローチは、 [14]でも述べられていた。

Page 281: 機械学習技術の現在+TensolFlow White Paper

モデル・パラレルな訓練

o モデル・パラレルな訓練では、モデルの異なった部分の計算が、サンプルの同じバッチのために、異なる計算デバイス上で同時に行われる。これも、容易にTensorFlowで表現できる。図8は、シーケンスからシーケンスの学習に使われるリカレントでディープなLSTMモデル([47])が、三つの異なるデバイス上でパラレルに実行される様子を示している。

Page 282: 機械学習技術の現在+TensolFlow White Paper

モデル・パラレルな訓練

Page 283: 機械学習技術の現在+TensolFlow White Paper

モデル計算のパイプラインのための並行ステップ

o ディープ・ニューラル・ネットワークの訓練で、もっと性能を引き出すためによく使われるもう一つの別の手法は、同じデバイス内で、モデルの計算をパイプライン化することである。同じデバイスのセットの内部で、複数の少数の並行ステップを走らせる。図9にその様子を示す。これは、どこか非同期のデータ・パラレル処理に似ている。異なったデバイス上に計算グラフのレプリカを作るのではなく、同じデバイス上でパラレル計算が行われることを除いては。このアプローチは、サンプルの単一のバッチの計算では、この単一のステップの間に、すべてのデバイスをすべての時間完全に使い切ることができない場合、「タイルの隙間を埋める」ことを可能にする。

Page 284: 機械学習技術の現在+TensolFlow White Paper

Concurrent steps

Page 285: 機械学習技術の現在+TensolFlow White Paper

8 パフォーマンス

このホワイトペーパーの将来のバージョンでは、単一マシンと分散実装の双方での、包括的な性能評価を行うことになるだろう。

Page 286: 機械学習技術の現在+TensolFlow White Paper

9 ツール

このセクションは、コアなTensorFlowグラフ実行エンジンの間近にいた我々が開発してきたいくつかのツールについて述べる。

Page 287: 機械学習技術の現在+TensolFlow White Paper

9 ツールp 9.1 TensorBoard:グラフ構造の可視化

と統計情報のサマリー

p 計算グラフの可視化

p サマリーデータの可視化

p 9.2 トレースのパフォーマンス

Page 288: 機械学習技術の現在+TensolFlow White Paper

9.1 TensorBoard: TensorBoard:グラフ構造の可視化と統計情報のサマリー

o ユーザーが計算グラフの構造を理解するのを助け、また、マシン・ラーニング・モデルの全体の振る舞いを理解するのを助けるために、我々は、TensorFlowのために、コンパニオンとして可視化ツールTensorBoard を開発してきた。それは、オープンソースのリリースに含まれている。

Page 289: 機械学習技術の現在+TensolFlow White Paper

計算グラフの可視化

o ディープ・ニューラル・ネットワークの計算グラフは、きわめて複雑なものになりうる。例えば、GoogleのInceptionモデル[48]に似た訓練用の計算グラフは、ディープ・コンボリューション・ニューラル・ネットワークで、2014年のコンテストで 高の分類パフォーマンスを示したのだが、TensorFlowの計算グラフでは、36,000個以上のノードを持っている。そして、言語モデルのためのディープ・リカレントLSTMモデルは、15,000以上のノードを持っている。

Page 290: 機械学習技術の現在+TensolFlow White Paper

o これらのグラフのサイズとトポロジーのおかげで、素朴な可視化テクニックでは、ごちゃごちゃした圧倒的に多い図式が得られるだけである。ユーザーが背後にあるグラフの組織を見ることを助けるために、TensorBordのアルゴリズムは、同一の構造を持ったものをグループとして注目して、ノードたちをハイレベルのブロックに分解する。このシステムは、同時に、高次元の働きをする、多くは簿記的な役割を果たしているのだが、そうしたノードを切り出して、スクリーンの別な領域に表示する。そうすることで、みてくれをすっきりしたものにし、計算グラフの中核的な部分に注意をフォーカスさせる。

Page 291: 機械学習技術の現在+TensolFlow White Paper

o 可視化全体は、インタラクティブである。ユーザーは、左右に移動したり、拡大したり、グループ化されたノードを、その細部がわかるように拡大できる。ディープ・コンボリューション・イメージ・モデルの例が、図10に示されている。

Page 292: 機械学習技術の現在+TensolFlow White Paper

9.1 TensorBoard: Visualization of graph structures and summary statistics

Page 293: 機械学習技術の現在+TensolFlow White Paper

サマリー・データの可視化

o マシン・ラーニング・モデルを訓練するとき、ユーザーは、しばしばモデルの様々な側面の状態を調べることができればと望む。そしてこの状態が時間とともにどのように変化するのかを知りたいと思う。この目的のためにTensorFlowは、グラフの中に挿入できる一群の異なったSummary操作をサポートしている。これらには、スカラー・サマリー(モデルのすべての特性、例えば、サンプルの集合を通じた損失関数の平均値、あるいは、計算グラフの実行にかかった時間等々のすべての特性について調べるもの)、ヒストグラム・ベースのサマリー(例えば、ニューラル・ネットワーク層での重みの分布とか)、イメージベースのサマリー(例えば、コンボリューション・ニューラル・ネットワークで学習されたフィルターの重みの可視化とか)が含まれている。

Page 294: 機械学習技術の現在+TensolFlow White Paper

o 典型的な計算グラフは、様々な興味ある値をモニターするために、サマリー・ノードが含まれるようにセットアップされている。そして、訓練グラフの実行時には、ほとんど常に、サマリー・ノードの集合も実行される。それに加えて、実行されている通常のノードも、クライアントのドライバー・プログラムも、訓練モデルに関連付けられたログファイルに、サマリーデータを書き出している。

Page 295: 機械学習技術の現在+TensolFlow White Paper

o TensorBoard のプログラムは、新しいサマリー・データのために、このログファイルを監視するように設定される。そして、このサマリー情報と時間につれてそれがどのように変化したかを表示することができる。(「時間」と言ったが、「時間」の測り方を選ぶ能力は持っていて、”time”というのは、TensorFlowプログラムの実行開始からの相対的な時計上の時間、すなわち、絶対時間で、”step”というのは、TensorFlowのプログラム開始から起きたグラフの実行数の数値的な測定のことである。)TensolBoardのサマリー値の可視化のスクリーン・ショットは、図11に示されている。

Page 296: 機械学習技術の現在+TensolFlow White Paper

モデルの時系列データの統計量のサマリーのTensorFlowでのグラフィックな表示

Page 297: 機械学習技術の現在+TensolFlow White Paper

9.2 パフォーマンスをトレースするo 我々は、また、EEG(2015年11月のオープンソース版には含まれていない)という内部ツールを持っている。我々はそれをTensorFlowグラフ実行の、正確な順序とパホーマンスの特徴について非常に細かい精度での情報を集め可視化するのに利用している。このツールは、単一マシンでも分散実装でもその両方で動き、TensorFlowプログラムの計算のボトルネックと通信パターンを理解するのに、非常に役立っている。

Page 298: 機械学習技術の現在+TensolFlow White Paper

o トレースは、システムのそれぞれのマシンから多様なソースで、同時に収集される。Linuxカーネルの ftrace、我々独自の軽量スレッドでのトレース・ツール、そしてCUDA Profiling Tools Interface (CUPTI)がある。こAのれらのログがあることで、分散訓練の実行ステップを、スレッドの切り替え、CUDAのカーネルの起動、DMA操作といった詳細をすべてマイクロ秒レベルの精度で再構築できる。

Page 299: 機械学習技術の現在+TensolFlow White Paper

o トレースは、可視化のサーバーに結合される。サーバーは、指定された時間範囲のイベントを急速に抽出して、ユーザー・インターフェースの解像度に合わせた適切な詳細さのレベルでそれを可視化する。通信、同期、GPUの停止に起因するどんな重要な遅れも同定され、ハイライトされた矢印を使って、ビジュアルに表示される。 初には、UIはトレース全体のオーバービューを与える。そこでは、も重要なパフォーマンス問題がハイライトされるだけだ。ユーザーが、積極的に画面を拡大するにつれて、細かな精度での詳細が描画される。

Page 300: 機械学習技術の現在+TensolFlow White Paper

o 図 12 は、マルチコアCPUプラットフォームで訓練されているモデルのEEG可視化のサンプルである。スクリーンショットの上1/3は、データフローの制約条件に従って、パラレルに起動されたTensorFlowの演算を表示している。トレースの下の部分は、いかに多くの演算が、スレッド・プールの中でコンカレントに実行される複数の作業アイテムに分解されているかを示す。右手の診断矢印のサイズは、スレッド・プールの中のどこで、キューイングの遅れが生まれているかを示している。雨13は、主要にGPU上で起きる計算のEEGによる、別の可視化の例である。

Page 301: 機械学習技術の現在+TensolFlow White Paper

マルチ・スレッド化されたCPU演算のEEG による可視化(x軸は秒での時間)

Page 302: 機械学習技術の現在+TensolFlow White Paper

CPUとGPUの活動を示したInceptionの訓練のEEGでの可視化

Page 303: 機械学習技術の現在+TensolFlow White Paper

o ホストのスレッドは、実行可能になるとTensorFlow GPU 演算をキューに入れているのを見ることができる。(薄い青が、スレッド・プールである) 黒地の管理スレッドが、他の色でプロセッサーのコアをまたいで移されているのを見ることができる。もう一度言うと、矢印はGPUからCPUへの転送が固まっていることを示している。すなわち、演算が重要なキューイングの遅れにあっていることを示している。

Page 304: 機械学習技術の現在+TensolFlow White Paper

o 終的には、図14が、TensorFlowのGPU演算が、どのようにして複数のGPUのストリームに割り当てられているかを調べることを可能にする、もっと詳細なビューである。データフローのグラフがパラレルな実行あるいはデータ転送を許される場合はいつでも、ストリームとストリームの従属性のプリミティブを用いて、我々は努めてGPUデバイスに対する順序の制約条件を明らかにするよう試みる。

Page 305: 機械学習技術の現在+TensolFlow White Paper

マルチ・ストリームのGPUの実行

Page 306: 機械学習技術の現在+TensolFlow White Paper

10 将来の仕事

Page 307: 機械学習技術の現在+TensolFlow White Paper

o 我々は、将来の仕事について、幾つかの異なった方向を持っている。我々は、人工知能のための新しい興味ふかいモデルを開発するために、TensorFlowを使い続けるであろう。そして、これを行っている過程で、基本的なTensorFlowシステムを拡張する必要があるようなものを発見するかもしれない。オープンソースのコミュニティも、TensorFlowの実装にとって、新しい興味ふかい方向を見つけるかもしれない。

Page 308: 機械学習技術の現在+TensolFlow White Paper

o 我々が考えている基本的なプログラミング・モデルの一つの拡張は、関数のメカニズムである。それによって、ユーザは、TensorFlow計算のすべての部分グラフを、再利用可能なコンポーネントとして指定できるような。実装では、我々は、TensorFlowの異なったフロントエンド言語をまたいでも、これらの関数を再利用可能なコンポーネントとなるようにデザインしてきた。だから、ユーザーはPythonのフロントエンドを使ってある関数を定義し、そのあとでその関数をC++フロントエンドの中で、基本的な構成要素として利用できるのだ。こうした言語間の再利用性は、マシン・ラーニングの研究者の生き生きしたコミュニティを加速していくだろうという希望を我々は持っている。研究者は研究のすべてのサンプルを公開しなくても、彼らの仕事から再利用可能なコンポーネントを公開すれば、他のコンテキストで、それが再利用されることになるのだから。

Page 309: 機械学習技術の現在+TensolFlow White Paper

o 我々はまた、TensorFlowのパフォーマンスを改善する、たくさんの具体的な方向を持っている。我々のこうした方向の一つは、TensorFlow実行の部分グラフを一つとって、おそらくは、テンソルの典型的なサイズや形の情報をもった実行時のプロファイルを使って、この部分グラフ用の 適化されたルーティンを生成する、just-in-timeのコンパイラーへの我々の 初の取り組みである。このコンパイラーは、ループの融合やブロッキングや局所性のためのタイリング、特定の形やサイズへの特殊化等々、多数の 適化を実行するためのセマンティックスを理解するだろう。

Page 310: 機械学習技術の現在+TensolFlow White Paper

o 我々はまた、将来の仕事の重要な領域は、配置とノードのスケジューリングのアルゴリズムの改良になるだろうと想像している。そのアルゴリズムは、どこで、異なったノードが実行され、いつ、それが実行を始めるか決定するのに利用される。我々は、現在、これらのサブシステムについて、多くの経験則を実装している。我々は、学ぶのではなく、よい配置の決定を行うマシンを持ちたいと望んでいる。(おそらくは、対象とする関数の強化学習と結び付けられた、ディープ・ニューラル・ネットワークを使って。)

Page 311: 機械学習技術の現在+TensolFlow White Paper

11 関連した仕事

Page 312: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowと様々な点で比較できる多くの他のシステムが存在する。Theano [7], Torch [13], Caffe [26],Chainer [49], Computational Network Toolkit [54] 。これらは、第一義的にニューラル・ネットワークの訓練のためにデザインされたいくつかのシステムである。これらのシステムは、TensorFlowの実装とは異なって、計算を単一のマシン上にマップする。TheanoとChainerと同じように、TensorFlowは, シンボルの微分をサポートする。このことは、勾配ベースの 適化アルゴリズムの定義と利用を容易にする。

Page 313: 機械学習技術の現在+TensolFlow White Paper

o Caffemのように、TensorFlow は、C++で書かれたコアを持っている。それは、訓練されたモデルを広い範囲の多様な製品、モバイル・デバイスのようなメモリーや計算の環境が制約の多い設定の元でも、配備するのを簡単にする。

Page 314: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowシステムは、幾つかのデザインの特徴を先行したシステムであるDistBelief [14] と共有している。後者のシステムは、Project Adam [10]やParameter Server project [33]とも似たデザインをしている。DistBeliefやProject Adamのように、TensorFlowは、計算をたくさんのマシン上のたくさんの計算デバイスに拡散することを可能とする。ユーザーは、マシン・ラーニング・モデルを、比較的高水準の記述を使って指定することが可能になる。

Page 315: 機械学習技術の現在+TensolFlow White Paper

o ただし、DistBelief やProject Adamとは違って、TensorFlowの汎用目的の,データフロー・グラフ・モデルは、もっと柔軟で、もっと広い範囲の多様なマシン・ラーニング・モデルと 適化アルゴリズムを表現するのに向いている。 それはまた、状態を持つパラメータ・ノードの表現を

変数とみなし、変数の更新演算をグラフへのノードの追加と考えることで、重要な単純化を成し遂げた。それに対して、DistBeliefやProject AdamやParameter Server systemsでは、すべては分離されたパラメーター・サーバーが、もっぱら、パラメータの値の通信と更新にあたっている。

Page 316: 機械学習技術の現在+TensolFlow White Paper

o イメージ・プロセッシングのパイプラインの表現のためのHalide system [40]も、TensorFlowのデータフロー・グラフと似た、中間表現を利用している。しかし、TensorFlowとは異なって、Halide systemは、実際には、演算のセマンティックについての高レベルな知識を持ち、この知識を利用して、並列性と局所性を考慮しながら、複数の演算を結合した高度に 適化されたコードを生成している。 Halideは、結果としての計算を単一のマシン上のみで走らせており、分散の設定では走らせていない。将来的には、我々は、TensorFlowを、演算をまたいだ動的なコンパイルのフレームワークをもったものに拡張したいと望んでいる。

Page 317: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowと同じように、クラスターをまたいだデータフロー・グラフの実行を行う、いくつかの他の分散システムが開発されてきた。Dryad [24] と Flume [8] は、いかにして、複雑なワークフローがデータフロー・グラフとして表現されうるかを示している。CIEL [37] と Naiad [36]は、データ従属コントロール・フローの一般的なサポートを導入した。CIELは、繰り返しを、動的に広げられるDAGとして表現し、一方、 Naiad は、低い遅延での繰り返しをサポートするために、サイクルを持つ静的なグラフを利用する。

Page 318: 機械学習技術の現在+TensolFlow White Paper

o Spark [55] は、以前の計算出力のsoft-stateキャッシュである“resilient distributed datasets” (RDDs)を利用して、同じデータに繰り返しアクセスする計算に適化されている。Dandelion [44]は、GPUを含むヘテロなデバイスのクラスターをまたいで、データフロー・グラフを実行する。

o TensorFlowは、これらのシステムのからの諸要素を借用したハイブリッドなデータフロー・モデルを使っている。そのデータフローの、次に実行されるべきノードを選択するコンポーネントであるスケジューラーは、 Dryad, Flume, CIEL, Sparkと同じ基本的なアルゴリズムを利用している。

Page 319: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowの分散アーキテクチャーは、システムが単一の 適化されたデータフロー・グラフを、全体の計算を表現するのに利用し、このグラフについての情報を協調のオーバーヘッドを 小化するために、それぞれのデバイス上にキャッシュしている点で、 Naiad に も近い。SparkやNaiadと同じように、TensorFlowは、クラスターの中に計算の作業セットを保持する十分なRAMがあるときに、 もよく働く。

Page 320: 機械学習技術の現在+TensolFlow White Paper

o TensorFlowでの繰り返しは、ハイブリッドなアプローチを使っている。同じデータフロー・グラフの複数のレプリカは、同じ変数の集合を共有しながら、同時に実行されるだろう。レプリカは、変数を通じて、非同期にデータの共有ができるし、あるいは、演算を同期させるのに、キューのようなグラフの同期メカニズムを利用することもできる。TensorFlowはまた、グラフ内の繰り返しをサポートしている。これは、CIELとNaiadのハイブリッドである。単純化のため、それぞれのノードは、その入力がすべて準備できたときに発火する(CIELのように)、しかし、効率性のために、そのグラフは静的でサイクリックなデータフローとして表現される(Niadのように)。

Page 321: 機械学習技術の現在+TensolFlow White Paper

12 結論

Page 322: 機械学習技術の現在+TensolFlow White Paper

o 我々は、TensorFlowを、柔軟なデータフロー・ベースのプログラミング・モデルとして述べてきた。また、単一マシンでも分散実装でも、このプログラミング・モデルは動くことも。このシステムは、先導的な研究と、Googleの製品とサービスの広い範囲の百以上のマシン・ラーニングのプロジェクトにそれを配備した実世界の経験から生まれた。我々は、オープンソース・バージョンのTensorFlowがある。生き生きとした共有されたコミュニティがTensorFlowの利用の周辺で育っていくことを望んでいる。我々は、Googleの外にいる人たちが、どのように自分の仕事でTensorFlowを使うかを見ることに、興奮している。

Page 323: 機械学習技術の現在+TensolFlow White Paper

参考資料

Page 324: 機械学習技術の現在+TensolFlow White Paper

o [1] Mart´ın Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghe-mawat, Ian Goodfellow, Andrew Harp, Geoffrey Irv- ing, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dan Mane´, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, IlyaSutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Vie´gas, OriolVinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, and Xiaoqiang Zheng. TensorFlow: Large-scale machine learning on heterogeneous systems, 2015. Soft- ware available from tensorflow.org.

o [2] Anelia Angelova, Alex Krizhevsky, and Vincent Van-houcke. Pedestrian detection with a large-field-of-view deep network. In Robotics and Automation (ICRA), 2015 IEEE International Conference on, pages 704–711. IEEE, 2015. CalTech PDF.

Page 325: 機械学習技術の現在+TensolFlow White Paper

o [3] Arvind and David E. Culler. Annual review of computer science vol. 1, 1986. chapterDataflow Architectures, pages 225–253. 1986. www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&doc=GetTRDoc.pdf&AD=ADA166235.

o [4] Arvind and Rishiyur S. Nikhil. Executing a pro-gram on the MIT tagged-token dataflow architec- ture. IEEE Trans. Comput., 39(3):300–318, 1990. dl.acm.org/citation.cfm?id=78583.

o [5] Jimmy Ba, Volodymyr Mnih, and Koray Kavukcuoglu. Multiple object recognition with visual atten- tion.

arXiv preprint arXiv:1412.7755, 2014. arxiv.org/abs/1412.7755.

o [6] Franc¸oise Beaufays. Theneural networks behind GoogleVoicetranscription, 2015.

googleresearch.blogspot.com/2015/08/the-neural-networks-behind-google-voice.html.

Page 326: 機械学習技術の現在+TensolFlow White Paper

o [7] James Bergstra, Olivier Breuleux, Fre´de´ric Bastien, Pas- cal Lamblin, Razvan Pascanu, Guillaume Desjardins, Joseph Turian, David Warde-Farley, and Yoshua Bengio. Theano: A CPU and GPU math expression compiler. In Proceedings of the Python for scientific computing con-ference (SciPy), volume 4, page 3. Austin, TX, 2010. UMontreal PDF.

o [8] Craig Chambers, Ashish Raniwala, Frances Perry, Stephen Adams, Robert R Henry, Robert Bradshaw, and Nathan Weizenbaum. FlumeJava: easy, effi-cient data-parallel pipelines. In ACM Sigplan No- tices, volume 45, pages 363–375. ACM, 2010. re-search.google.com/pubs/archive/35650.pdf.

o [9] Sharan Chetlur, Cliff Woolley, Philippe Vandermer-sch, Jonathan Cohen, John Tran, Bryan Catanzaro, and Evan Shelhamer. cuDNN: Efficient primitives for deep learning. arXiv preprint arXiv:1410.0759, 2014. arxiv.org/abs/1410.0759.

Page 327: 機械学習技術の現在+TensolFlow White Paper

o [10] Trishul Chilimbi, Yutaka Suzue, Johnson Apacible, and Karthik Kalyanaraman. Project Adam: Building an efficient and scalable deep learning training system. In 11th USENIX Symposium on Operating Systems Design and Implementation (OSDI 14), pages 571–582, 2014. www.usenix.org/system/files/conference/osdi14/osdi14-paper-chilimbi.pdf.

o [11] Jack Clark. Google turning itslucrative web search over to AImachines, 2015.

www.bloomberg.com/news/articles/2015-10-26/google-turning-its-lucrative-web-search-over-to-ai-machines.

o [12] Cliff Click. Global code motion/global value number-ing. In ACM SIGPLAN Notices, volume 30, pages 246–257. ACM, 1995. courses.cs.washington.edu/courses/cse501/06wi/reading/click-pldi95.pdf.

Page 328: 機械学習技術の現在+TensolFlow White Paper

o [13] Ronan Collobert, Samy Bengio, and Johnny Marie´thoz. Torch: A modular machine learning software library. Technical report, IDIAP, 2002. infoscience.epfl.ch/record/82802/files/rr02-46.pdf.

o [14] Jeffrey Dean, Gregory S. Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Quoc V. Le, Mark Z. Mao, Marc’Aurelio Ranzato, Andrew Senior, Paul Tucker,Ke Yang, and Andrew Y. Ng. Large scale distributed deep networks. In NIPS, 2012. Google Research PDF.

o [15] Jack J Dongarra, Jeremy Du Croz, Sven Hammar-ling, and Iain S Duff. A set of level 3 basic lin-ear algebra subprograms. ACM Transactions on Mathematical Software (TOMS), 16(1):1–17, 1990. www.maths.manchester.ac.uk/˜sven/pubs/Level3BLAS-1-TOMS16-90.pdf.

o [16] Andrea Frome, Greg S Corrado, Jonathon Shlens, Samy Bengio, Jeff Dean, Tomas Mikolov, et al. DeVISE: A deep visual-semantic embedding model. In Advances in Neural Information Pro- cessing Systems, pages 2121–2129, 2013. re-search.google.com/pubs/archive/41473.pdf.

Page 329: 機械学習技術の現在+TensolFlow White Paper

o [17] Javier Gonzalez-Dominguez, Ignacio Lopez-Moreno, Pe- dro J Moreno, and Joaquin Gonzalez-Rodriguez. Frame- by-frame language identification in short utterances using deep neural networks. Neural Networks, 64:49–58, 2015.

o [18] Otavio Good. How GoogleTranslate squeezes deep learning onto a

phone, 2015. googleresearch.blogspot.com/2015/07/how-google-translate-squeezes-deep.html.

o [19] Ian J. Goodfellow, Yaroslav Bulatov, Julian Ibarz, Sacha Arnoud, and Vinay Shet. Multi-digit number recognition from Street View imagery using deep convolutional neu- ral networks. In International Conference on Learning Representations, 2014. arxiv.org/pdf/1312.6082.

Page 330: 機械学習技術の現在+TensolFlow White Paper

o [20] Georg Heigold, Vincent Vanhoucke, Alan Senior, Patrick Nguyen, Marc’Aurelio Ranzato, Matthieu Devin, and Jeffrey Dean. Multilingual acoustic models using dis-tributed deep neural networks. In Acoustics, Speech and Signal Processing (ICASSP), 2013 IEEE Interna-tional Conference on, pages 8619–8623. IEEE, 2013. re-search.google.com/pubs/archive/40807.pdf.

o [21] Geoffrey E. Hinton, Li Deng, Dong Yu, George E. Dahl, Abdel-rahman Mohamed, Navdeep Jaitly, An- drew Senior, Vincent Vanhoucke, Patrick Nguyen, Tara N. Sainath, and Brian Kingsbury. Deep neural networks for acoustic modeling in speech recognition: The shared views of four research groups. IEEE Signal Process. Mag., 29(6):82– 97, 2012.

www.cs.toronto.edu/˜gdahl/papers/deepSpeechReviewSPM2012.pdf.

o [22] Sepp Hochreiter and Ju¨rgen Schmidhuber. Long short- term memory. Neural computation, 9(8):1735–1780, 1997. ftp.idsia.ch/pub/juergen/lstm.pdf.

Page 331: 機械学習技術の現在+TensolFlow White Paper

o [23] Sergey Ioffe and Christian Szegedy. Batch normaliza- tion: Accelerating deep network training by reducing internal covariate shift. CoRR, abs/1502.03167, 2015. arxiv.org/abs/1502.03167.

o [24] Michael Isard, Mihai Budiu, Yuan Yu, Andrew Birrell, and Dennis Fetterly. Dryad: distributed data-parallel programs from sequential building blocks. In ACM SIGOPS Operating Systems Review, volume 41, pages 59–72. ACM, 2007. www.michaelisard.com/pubs/eurosys07.pdf.

o [25] Benoˆıt Jacob, Gae¨l Guennebaud, et al. Eigen library for linear algebra. eigen.tuxfamily.org.

o [26] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev, Jonathan Long, Ross Girshick, Sergio Guadar- rama, and Trevor Darrell. Caffe: Convolutional archi- tecture for fast feature embedding. In Proceedings of the ACM International Conference on Multimedia, pages 675–678. ACM, 2014. arxiv.org/pdf/1408.5093.

Page 332: 機械学習技術の現在+TensolFlow White Paper

o [27] Andrej Karpathy, George Toderici, Sachin Shetty, Tommy Leung, Rahul Sukthankar, and Li Fei- Fei. Large-scale video classification with con- volutionalneural networks. In Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Con- ference on, pages 1725–1732. IEEE, 2014. re-search.google.com/pubs/archive/42455.pdf.

o [28] A Krizhevsky. Cuda-convnet, 2014. code.google.com/p/cuda-convnet/.

o [29] Alex Krizhevsky. One weird trick for paralleliz-ing convolutional neural networks. arXiv preprint arXiv:1404.5997, 2014. arxiv.org/abs/1404.5997.

o [30] Alex Krizhevsky, Vinod Nair, and Geoffrey Hinton. The CIFAR-10 dataset. www.cs.toronto.edu/˜kriz/cifar.html.

o [31] Quoc Le, Marc’Aurelio Ranzato, Rajat Monga, Matthieu Devin, Greg Corrado, Kai Chen, Jeff Dean, and Andrew Ng. Building high-level features using large scale unsu- pervised learning. In ICML’2012, 2012. Google Research PDF

Page 333: 機械学習技術の現在+TensolFlow White Paper

o [32] Yann LeCun, Corinna Cortes, and Christopher JC Burges. The MNIST database of handwritten digits, 1998. yann.lecun.com/exdb/mnist/.

o [33] Mu Li, Dave Andersen, and Alex Smola. Parameter server. parameterserver.org.

o [34] Chris J Maddison, Aja Huang, Ilya Sutskever, and David Silver. Move evaluation in Go using deep convolutional neural networks. arXiv preprint arXiv:1412.6564, 2014. arxiv.org/abs/1412.6564.

o [35] Tomas Mikolov, Kai Chen, Greg Corrado, and Jef- frey Dean. Efficient estimation of word representa-tions in vector space. In International Conference on Learning Representations: Workshops Track, 2013. arxiv.org/abs/1301.3781.

o [36] Derek G Murray, Frank McSherry, Rebecca Isaacs, Michael Isard, Paul Barham, and Mart´ın Abadi. Naiad: a timely dataflow system. In Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Princi-ples, pages 439–455. ACM, 2013. Microsoft Research PDF.

Page 334: 機械学習技術の現在+TensolFlow White Paper

o [37] Derek G. Murray, Malte Schwarzkopf, Christopher Smowton, Steven Smit, Anil Madhavapeddy, and Steven Hand. Ciel: a universal execution engine for dis-tributed data-flow computing. In Proceedings of the Ninth USENIX Symposium on Networked Systems Design and Implementation, 2011. Usenix PDF.

o [38] Arun Nair, Praveen Srinivasan, Sam Blackwell, Cagdas Alcicek, Rory Fearon, Alessandro De Maria, Ve-davyas Panneershelvam, Mustafa Suleyman, Charles Beattie, Stig Petersen, et al. Massively parallel meth-ods for deep reinforcement learning. arXiv preprint arXiv:1507.04296, 2015. arxiv.org/abs/1507.04296.

o [39] CUDA Nvidia. Cublas library. NVIDIA Corpo-ration, Santa Clara, California, 15, 2008. devel-oper.nvidia.com/cublas.

Page 335: 機械学習技術の現在+TensolFlow White Paper

o [40] Jonathan Ragan-Kelley, Connelly Barnes, Andrew Adams, Sylvain Paris, Fre´do Durand, and Saman Ama-rasinghe. Halide: A language and compiler for optimiz-ing parallelism, locality, and recomputation in image pro-cessing pipelines. ACM SIGPLAN Notices, 48(6):519–530, 2013. people.csail.mit.edu/fredo/tmp/Halide-5min.pdf.

o [41] Bharath Ramsundar, Steven Kearnes, Patrick Riley, Dale Webster, David Konerding, and Vijay Pande. Massively multitask networks for drug discovery. arXivpreprint arXiv:1502.02072, 2015. arxiv.org/abs/1502.02072.

o [43] Chuck Rosenberg. Improving Photo Search: A step across the semantic gap, 2013. googleresearch.blogspot.com/2013/06/improving-photo-search-step-across.html.

Page 336: 機械学習技術の現在+TensolFlow White Paper

o [44] Christopher J Rossbach, Yuan Yu, Jon Currey, Jean-Philippe Martin, and Dennis Fetterly. Dandelion: a compiler and runtime for heterogeneous systems. In Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles, pages 49–68. ACM, 2013. research-srv.microsoft.com/pubs/201110/sosp13-dandelion-final.pdf.

o [45] David E Rumelhart, Geoffrey E Hinton, and Ronald J Williams. Learning representations by back-propagating errors. Cognitive modeling, 5:3, 1988. www.cs.toronto.edu/ hinton/absps/naturebp.pdf.

o [46] Has¸im Sak, Andrew Senior,KanishkaRao, Franc¸oise Beaufays, and Johan

Schalkwyk. Google Voice Search:faster and more accurate, 2015.

googleresearch.blogspot.com/2015/09/google-voice-search-faster-and-more.html.

Page 337: 機械学習技術の現在+TensolFlow White Paper

o [47] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. Sequence to sequence learning with neural networks. In NIPS, 2014. papers.nips.cc/paper/5346-sequence-to-sequence- learning-with-neural.

o [48] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Ser- manet, Scott Reed, Dragomir Anguelov, DumitruEr- han, Vincent Vanhoucke, and Andrew Rabinovich. Go- ing deeper with convolutions. In CVPR’2015, 2015. arxiv.org/abs/1409.4842.

o [49] Seiya Tokui. Chainer: A powerful, flexible and intuitive framework of neural networks. chainer.org.

o [50] Vincent Vanhoucke. Speech recognition and deep learn- ing, 2015. googleresearch.blogspot.com/2012/08/speech-recognition-and-deep-learning.html.

Page 338: 機械学習技術の現在+TensolFlow White Paper

o [51] Abhishek Verma, Luis Pedrosa, Madhukar Korupolu, David Oppenheimer, Eric Tune, and John Wilkes. Large-scale cluster management at Google with Borg. In Proceedings of the Tenth European Conference on Computer Systems, page 18. ACM, 2015. re-search.google.com/pubs/archive/43438.pdf.

o [52] O. Vinyals, L. Kaiser, T. Koo, S. Petrov, I. Sutskever, and G. Hinton. Grammar as a foreign language. Technical report, arXiv:1412.7449, 2014. arxiv.org/abs/1412.7449.

o [53] Oriol Vinyals, Meire Fortunato, and NavdeepJaitly. Pointer networks. In NIPS, 2015. arxiv.org/abs/1506.03134.

o [54] Dong Yu, Adam Eversole, Mike Seltzer, KaishengYao, Zhiheng Huang, Brian Guenter, Oleksii Kuchaiev, Yu Zhang, Frank Seide, Huaming Wang, et al. An introduction to computational networks and the com-putational network toolkit. Technical report, Tech. Rep. MSR, Microsoft Research, 2014, 2014. re-search.microsoft.com/apps/pubs/?id=226641.

Page 339: 機械学習技術の現在+TensolFlow White Paper

o [55] Matei Zaharia, Mosharaf Chowdhury, Tathagata Das, Ankur Dave, Justin Ma, Murphy McCauley, Michael J Franklin, Scott Shenker, and Ion Stoica. Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing. In Proceedings of the 9th USENIX conference on Networked Systems De- sign and Implementation. USENIX Association, 2012. www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf.

o [56] Matthew D. Zeiler, Marc’Aurelio Ranzato, RajatMonga, Mark Mao, Ke Yang, Quoc Le, Patrick Nguyen, Andrew Senior, Vincent Vanhoucke, Jeff Dean, and Geoffrey E. Hinton. On rectified linear units for speech processing. In ICASSP, 2013. re-search.google.com/pubs/archive/40811.pdf.