投稿

TensorFlow 1.0リリースと TF Dev Summit 2017 でのJeff Deanのキーノート

イメージ
2月15日、TensorFlow 1.0をリリースした、TensorFlow Developers Summit 2017 のキーノートの様子です。 冒頭のスピーチは、もちろん、Jeff Dean。タイトルは、「TensorFlow : ML for Everyone」 みんなのための機械学習ですね。 TeasorFlow登場以前の、「第一世代」の"DistBelief" の話から始まります。2012年の「Googleの猫」で有名なシステムですね。スケーラブルで実際に製品版として動いていたんだけど、GPUもCPUもハードは固定されていて柔軟ではなかったと。RNNや強化学習にも使えなかったと。 それと比べると、「第二世代」のTensorFlowは、多くのプラットフォームをサポートして(Rasberry Piの上だって動く)、その上、Googleのクラウド上でも動く(それにもたくさんの方法がある)。 そして、TensorFlowは、Pythonを始め、C++, Java, Go, Haskell, R と、多くの言語をサポートしている。(Haskellでも動くんだ、知らなかった。もっとも最近出た Fold は、関数型プログラミングそのものだからな。) TensorFlowの大きな特徴は、TensorBoardのような、Visualizationの優れたツールを、一緒に提供していること。 TensorFlowは、また、Google自身の内部でも、検索、Gmail、翻訳、地図、Android、写真、スピーチ、YouTube ... 様々な分野で、急速に利用が進んでいる。 オープンソースのTensorFlowの開発は、GitHubの機械学習の分野では、ナンバーワンのレポジトリーの数を占めている。 機械学習の様々なフレームワークの中でも、TensorFlowが、圧倒的に利用されている。 GitHubでのStarの数は、 TensorFlow   44508 scikit-lean     16191 Caffe            15690 CNTK             9383 MXNet           7896 Torch

Cloud Spannerについて

イメージ
Googleが、これまで自社内部で利用してきたSpannerをクラウド・サービスとして公開した。 "Introducing Cloud Spanner: a global database service for mission-critical applications" 2012年のOSDIで論文が公開されたSpannerは、key-valueをベースにした拡張性と、RDBのACIDなトランザクション処理能力を併せ持つ強力な分散データベースである。タイムスタンプ・ベースのトランザクション処理に必要な正確な時間を得る為に、GPSや原子時計を利用。その上に、時間の不確実性を組み込んでいる。 当時、次のSpanner論文を日本語に翻訳した。(当時、残念ながら、Google翻訳はなかった。) "Spanner: Google’s Globally-Distributed Database"  丸山による翻訳は、次の リンク からダウンロードできる。利用されたい。 その頃のGoogleの大規模分散システムの動向については、Spannerを含めて、2013年のマルレクで取り上げている。「 大規模分散システムの現在 --- GFS, MapReduce, BigTableは、どう進化したか 」合わせて参照されたい。

LSTM -- Gateを持つRNN

イメージ
RNNは、基本的には、単純な三層構造を持つネットワークをユニットとして、その隣り合う隠れ層同士をフルコネクトで横につなげたものだ。ただし、Feed ForwardのDNNのように、実際に、ユニットを積み重ねるのではなく、隠れ層を結合する重みのパラメーターを共有し、再帰的にシステムを記述する。 RNNの発展系LSTMも、こうしたRNNの基本的なアイデアを踏襲している。ただ、組み合わせの基本となるユニットが少し複雑な構成をしている。LSTMのユニット(Cellと呼ばれる)に導入された新しいアイデアの中心にあるのが、今回、取り上げるGateである。 LSTMの働きを理解するのに、Gateの働きの理解は必須であるのだが、同時に、それは、LSTMの働きを理解する、最も早い近道でもある。 今回は、RNNやLSTMの文脈を離れて、その意味では、天下り的であるが、ニューラル・ネットワーク上のGate回路について見てみようと思う。 次の図の左側が、Gateの構成をグラフで示したものである。 Gateは、入力( In )を出力( Out )に渡すのだが、その流れをGateに与えられる第三の情報( X )でコントロールするのだ。 Gateを構成しているのは、二つの回路だ。(図の右) 一つの回路(図右下)は、Gateに与えられる情報 Xを、Gateを直接コントロールする情報 Controlに変える。もう一つの回路は、Control 情報の元で、入力 In を出力 Out に変える。 Gate内部で、XからControlを生成する回路(図右下)は、Sigmoid関数を活性化関数とする一層のフルコネクトのニューラル・ネットワークである。図中の四角の中に書かれたσは、この層の活性化関数がSigmoidであることを表している。ただし、この層の重み W やバイアス b は、この図では省略されている。 ContorolとInから、Outを生成する回路(図右上)が行なっているのは、簡単な演算である。二つの量を掛け合わせるだけ。ただし、掛け合わせは、ベクトルの要素ごとに行われる。これは、Hadamard積と呼ばれるものだ。Hadamard積については、次の図を参考にされたい。 こうして、Gateが行なっている働きは、次の二つの式で表

Google様にAdSense落とされた!

1月からblogを始めた。 Google様謹製のBloggerを使ったので、どうせならAdSenseも使ってみようと申し込んだ。 ところが、先日、こんな通知が来て、Google様にAdSense落とされた! ----------------------------------------------------- お客様のアカウントで次の違反が確認されましたので、アカウントは不承認となりました。 承認されなかった理由は次のとおりです。 不十分なコンテンツ (ここ太字): AdSense の承認を得てサイトに関連性の高い広告を掲載していただくには、AdSense の担当者による審査とクローラによる解析でページの内容を判断できるだけのテキストがページに含まれている必要があります。 この問題を解決するには、次のヒントをお試しください。 ・ページで十分なテキストを使用してください。画像や動画、Flash アニメーションがほとんどを占めるウェブサイトは承認されません。 ・コンテンツには、タイトルだけでなく、意味のある文章や段落が含まれている必要があります。 .....(以下略) ----------------------------------------------------- 僕のblog は、「ページの内容を判断できるだけのテキストがページに含まれて」いないと判断されたらしい。コンテンツでWelqにも負け、「担当者による審査」Welqチェックにも敗れたということなのかしら? 「コンテンツには、タイトルだけでなく、意味のある文章や段落が含まれている必要があります。」と言われるのは、なんかおかしいと思うけど、まあ、いいか。いろいろあらーな。 明日から、SEO対策しよ。 それよりも、Google様にいぢめられた丸山が、かわいそうだと思ったら、丸山のblogにアクセスしてください。

TensorFlow Fold Blocks チュートリアル (Google翻訳バージョン)

TensorFlow Foldの Blocks Tutorial を翻訳しました。 嘘です。全部、Google翻訳です。 Blocks Tutorial Introduction  Motivating example Basic concepts Primitive blocks  Converting Python objects into tensors. Using TensorFlow tensors. Functions and Layers Python operations Block composition Wiring blocks together Dealing with sequences Dealing with records Wiring things together, in more complicated ways. Recursion and forward declaration Introduction 読者がTensorFlowの基本的な概念と深い理解を理解していると仮定します。そうでない場合は、TensorFlowチュートリアルを開始するのがよいでしょう。 Foldモデルへの入力は、Pythonオブジェクトのミニバッチです。これらのオブジェクトは、プロトコルバッファ、JSON、XML、またはある種のカスタムパーサをデシリアライズして生成することができます。入力オブジェクトは木構造であると仮定される。 Foldモデルの出力は、TensorFlowテンソルの集合であり、通常の方法で損失関数とオプティマイザに接続できます。 入力としてデータ構造のミニバッチが与えられた場合、Foldは入力データを走査し、TensorFlowによって効率的に実行できる方法で操作を結合およびスケジューリングします。たとえば、ツリー内の各ノードが、共有ウェイトを持つ完全に接続されたレイヤーを使用してベクトルを出力する場合、Foldはツリーを単にトラバースするだけでなく、ベクトル行列の乗算演算を行います。代わりに、ツリー内の同じ深さのノードをマージします。これは、より大きい、より効率的な行列 - 行列乗算演算に並行して実行され、その後、出力行列を再びベクトルに分割します。 Moti

2/28 マルレク「RNNの基礎」参考資料まとめ

イメージ
2/28開催のマルレク「RNNの基礎」では、第一部「RNN」、第二部「LSTM」という構成を考えています。 この間、blogに書いた情報のインデックスをまとめておきました。 「2/28 マルレク「RNNの基礎」参考資料まとめ」 http://maruyama097.blogspot.com/2017/02/228-rnn.html ご利用ください。 2/28 マルレク「RNNの基礎」 第一部 「RNN」 「RNNとは何か?」  http://maruyama097.blogspot.jp/2017/02/rnn_7.html 「Sequence to Sequence」  http://maruyama097.blogspot.jp/2017/02/sequence-to-sequence.html 「RNNでの φ ( WX + b ) の応用」 http://maruyama097.blogspot.jp/2017/02/rnn-wx-b.html   「20数年前、いったん放棄されたRNN」 http://maruyama097.blogspot.jp/2017/02/20rnn.html 「Back to the Future -- RNNの復活」 http://maruyama097.blogspot.com/2017/02/back-to-future-rnn.html 第二部 「LSTM」  これからです。乞うご期待。

TensorFlow Foldについて

イメージ
Googleが、TensorFlow Foldというライブラリーを発表しました。 "Announcing TensorFlow Fold: Deep Learning With Dynamic Computation Graphs" (論文は、 こちら ) この図の意味について簡単に説明したいと思います、 "computer scientists love "という文は、文字列あるいはwordのSepquence として見ることができます。普通のRNNやLSTMでは、こうしたSequenceとして入力を受け付けます。 ただ、先のSequenceは、文法的な構造を持っています。"computer scientists"が主語(節)で、"love"が動詞、"putting data in trees"が目的語(節)です。 構文の構造は、((Cpmputer scientists) (love ((putting data) (in tree)))) こんな感じですね。 ただ、先の文字列をSequenceとして入力すると、そうした文法構造の情報は、皆、失われます。それでは、文の持つ情報を正しく引き出すことはできません。 と言って、一つの文ごとに、その文法構造に対応したニューラルネットを構築していたのでは、沢山の文を解析するには、沢山のニューラルネットを構築しないといけなくなります。 一つのモデルで、SGDのバッチを回すというやり方だと、個々にモデルが違うような場合には、うまく、バッチの処理ができません。 この図では、次のようなプログラムが中心的な役割を果たしています。キャプチャーのタイミングが悪くて、図が書けていますが、本当は、単純なループです。 先の図と、この図を足したものが、本当のプログラムに近いかな。 先のデータ((Cpmputer scientists) (love ((putting data) (in tree)))) ですが、データの結合がわかりやすいように、色をつけます。(オレンジ (青 Cpmputer scientists) (紫 love ((赤 pu