Soumettre la recherche
Mettre en ligne
TensorFlowとCNTK
•
Télécharger en tant que PPTX, PDF
•
17 j'aime
•
8,782 vues
maruyama097
Suivre
2016年4月4日のクラウド研究会 @ Googleでの丸山の講演資料です。
Lire moins
Lire la suite
Internet
Signaler
Partager
Signaler
Partager
1 sur 204
Télécharger maintenant
Recommandé
Convolutionl Neural Network 入門
Convolutionl Neural Network 入門
maruyama097
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
Tadaichiro Nakano
はじめての人のためのDeep Learning
はじめての人のためのDeep Learning
Tadaichiro Nakano
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能
Ryosuke Okuta
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
Deep Learning JP
Recommandé
Convolutionl Neural Network 入門
Convolutionl Neural Network 入門
maruyama097
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
Deep Learning基本理論とTensorFlow
Deep Learning基本理論とTensorFlow
Tadaichiro Nakano
はじめての人のためのDeep Learning
はじめての人のためのDeep Learning
Tadaichiro Nakano
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能
Ryosuke Okuta
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
深層学習フレームワーク Chainer の開発と今後の展開
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
Deep Learning JP
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
marsee101
Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~
nlab_utokyo
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Shinya Akiba
Deep learning入門
Deep learning入門
magoroku Yamamoto
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Yasutomo Kawanishi
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
Ryota Suzuki
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Natsutani Minoru
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
孝好 飯塚
DeepLearningTutorial
DeepLearningTutorial
Takayoshi Yamashita
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
Shotaro Sano
bigdata2012ml okanohara
bigdata2012ml okanohara
Preferred Networks
Deep Learningの基礎と応用
Deep Learningの基礎と応用
Seiya Tokui
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
RCCSRENKEI
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
Kenta Oono
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
弘毅 露崎
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Seiya Tokui
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
NVIDIA Japan
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
NVIDIA Japan
Contenu connexe
Tendances
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
marsee101
Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~
nlab_utokyo
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Shinya Akiba
Deep learning入門
Deep learning入門
magoroku Yamamoto
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Yasutomo Kawanishi
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
Ryota Suzuki
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Natsutani Minoru
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
孝好 飯塚
DeepLearningTutorial
DeepLearningTutorial
Takayoshi Yamashita
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
Shotaro Sano
bigdata2012ml okanohara
bigdata2012ml okanohara
Preferred Networks
Deep Learningの基礎と応用
Deep Learningの基礎と応用
Seiya Tokui
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Ohsawa Goodfellow
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
RCCSRENKEI
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
Kenta Oono
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
弘毅 露崎
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Seiya Tokui
Tendances
(20)
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Deep learning入門
Deep learning入門
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
Pythonで体験する深層学習 5章
Pythonで体験する深層学習 5章
DeepLearningTutorial
DeepLearningTutorial
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
bigdata2012ml okanohara
bigdata2012ml okanohara
Deep Learningの基礎と応用
Deep Learningの基礎と応用
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
Similaire à TensorFlowとCNTK
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
NVIDIA Japan
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
NVIDIA Japan
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
Masayoshi Kondo
[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)
Hideki Okada
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
fukuoka.ex
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック
Sony Network Communications Inc.
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章
Haruki Eguchi
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
Kohei KaiGai
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れ
Kazuki Motohashi
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
TVM の紹介
TVM の紹介
Masahiro Masuda
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 information
Sony Network Communications Inc.
いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成
Yoshi Sakai
MII conference177 nvidia
MII conference177 nvidia
Tak Izaki
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章
Haruki Eguchi
[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部
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
エヌビディアが加速するディープラーニング ~進化するニューラルネットワークとその開発方法について~
最先端NLP勉強会2017_ACL17
最先端NLP勉強会2017_ACL17
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
ICCV 2019 論文紹介 (26 papers)
ICCV 2019 論文紹介 (26 papers)
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
20171206 Sony Neural Network Console 活用テクニック
20171206 Sony Neural Network Console 活用テクニック
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れ
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
TVM の紹介
TVM の紹介
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 information
いきなりAi tensor flow gpuによる画像分類と生成
いきなりAi tensor flow gpuによる画像分類と生成
MII conference177 nvidia
MII conference177 nvidia
Define and expansion of cpp macro
Define and expansion of cpp macro
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章
[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 Isolation
maruyama097
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
maruyama097
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座
maruyama097
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper
maruyama097
Cloud OSの進化を考える
Cloud OSの進化を考える
maruyama097
機械学習技術の現在
機械学習技術の現在
maruyama097
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
maruyama097
Facebook Parseの世界
Facebook Parseの世界
maruyama097
Aurora
Aurora
maruyama097
Project Araとものづくりの未来
Project Araとものづくりの未来
maruyama097
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
maruyama097
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
maruyama097
エンタープライズと機械学習技術
エンタープライズと機械学習技術
maruyama097
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
maruyama097
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?
maruyama097
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
maruyama097
人間の思考、機械の思考
人間の思考、機械の思考
maruyama097
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケット
maruyama097
Google Dremel
Google Dremel
maruyama097
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
maruyama097
Plus de maruyama097
(20)
ContainerとName Space Isolation
ContainerとName Space Isolation
ニューラル・ネットワークと技術革新の展望
ニューラル・ネットワークと技術革新の展望
Neural Network + Tensorflow 入門講座
Neural Network + Tensorflow 入門講座
機械学習技術の現在+TensolFlow White Paper
機械学習技術の現在+TensolFlow White Paper
Cloud OSの進化を考える
Cloud OSの進化を考える
機械学習技術の現在
機械学習技術の現在
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
Facebook Parseの世界
Facebook Parseの世界
Aurora
Aurora
Project Araとものづくりの未来
Project Araとものづくりの未来
ハードウェア技術の動向 2015/02/02
ハードウェア技術の動向 2015/02/02
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
エンタープライズと機械学習技術
エンタープライズと機械学習技術
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
人間に出来ること --- 人間 vs 機械 Part I 進化と自然認識
Cyber-Physical Systems とは何か?
Cyber-Physical Systems とは何か?
Project Araと新しいものづくりのエコシステム
Project Araと新しいものづくりのエコシステム
人間の思考、機械の思考
人間の思考、機械の思考
グローバル・ネットワークの成立とネットワーク・マーケット
グローバル・ネットワークの成立とネットワーク・マーケット
Google Dremel
Google Dremel
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
大規模分散システムの現在 -- GFS, MapReduce, BigTableはどう変化したか?
TensorFlowとCNTK
1.
2016/04/04 クラウド研究会 丸山不二夫 ニューラル・ネットワークと技術革新の展望 TensorFlowとCNTK
2.
Agenda ニューラル・ネットワークと技術革新の展望 クラウドとモバイルへのインパクト
我々自身がデータをもつことの重要性 ニューラル・ネットワーク技術の共通の基礎 訓練と実行 グラフ表現とモジュール構造 パラメーター変更のアルゴリズム TensorFlowとCNTK CNTKの高速化チューニング TensorFlowの大規模分散化
3.
ニューラル・ネットワークと 技術革新の展望 クラウドとモバイルへのインパクト 我々自身がデータをもつことの重要性 Part
I
4.
クラウドとモバイルへのインパクト クラウド・ビジネスの新しい市場 新しいスタイルのモバイル・アプリ
GCPNEXTから 技術とビジネス --- Googleの場合 今後の展望
5.
ニューラル・ネットワークの 訓練と推論実行の「非対称性」 ニューラル・ネットワークでの計算は、データ学習を行う 「訓練」と「推論実行」の大きく二つのフェーズに分かれる。 訓練では、膨大なデータを繰り返し学習して、ニューラル・ ネットワーク内部のパラメーターを、少しづつ修正していく。 それは、大規模で時間のかかるバッチ処理になる。
しかし、こうしていったん学習されたパラメーターを利用す れば、推論(数値予測・クラス分類等)を実行するのは、ス マホ上でもリアルタイムに可能なぐらい、軽い処理になる。 ニューラル・ネットワークの訓練と実行の二つのフェーズ の、必要とされる処理能力の大きな「非対称性」は、今日 のITの基本的なインフラであるクラウドとモバイルの双方 の今後に、大きなインパクトを与えていくだろう。
6.
「訓練」のサービス提供 クラウド・ビジネスの新しい市場 訓練のフェーズで必要とされる、膨大なデータ処理の能力 は、クラウド・ビジネスに、訓練のサービスを提供するとい う、これまでになかった新しい市場を提供していくだろう。 今回のGCPNEXTでは、商業サービス公開の発表はな かったが、Google
Cloud Machine Learningがター ゲットとしているのは、そうした市場だ。このクラウドの新し い市場でも、Googleは先行しているように見える。 小論 のPart IIIでも述べるように、Googleは、TensorFlow の大規模分散化に注力している。
7.
Google Cloud Machine
Learning GCPNEXT 2016 でのJeff Dean
8.
新しいスタイルのモバイル・アプリ 学習の成果が、モバイル上でも実行可能なことは、ネイ ティブ・アプリともWebアプリともことなった第三のスタイル のモバイル・アプリが生まれることを意味する。それは、プ ログラムではなく、訓練済みのデータに基づいて動作する。 既に、TensorFlowではGoogleの画像認識の Inception相当モデルが、ネットワーク接続なしでも Android上で動くサンプルが提供されている。これは、驚 異的なものだ。
ここではまた、クラウドがモバイルにリアルタイムのAI サービスを提供することも可能になる。今回公開された Speech APIやVision APIは、そうしたものだ。当然、ク ラウド上・モバイル上のそれらのハイブリッド・アプリが生 まれてくるだろう。
9.
Cloud Vision API GCPNEXT
2016 から
10.
Cloud Vision API GCPNEXT
2016 から
11.
Cloud Vision API GCPNEXT
2016 から
12.
Cloud Vision API GCPNEXT
2016 から
13.
Cloud Vision API GCPNEXT
2016 から
14.
Cloud Vision API GCPNEXT
2016 から
15.
Cloud Speech API GCPNEXT
2016 から
16.
Use your own
data to train models GCPNEXT 2016 から
17.
技術とビジネス --- Googleの場合 Google内部での機械学習技術の利用は急増してい る。ただ、それには理由がある。それは、彼らの基本 的なビジネスである検索と広告の分野で、機械学習 技術が極めて有効に利用可能だという認識が広まっ ているからである。技術をビジネスがドライブし、ビジ ネスを技術がドライブしている。
18.
Google内部でのDeeo Learning技術利用の拡大
19.
Cloud Machine Learningの発表では、 どんなデモが行われたか?
20.
GCP NEXTでのClick Predictionデモ よく見えないので拡大してみた
21.
目標は、過去のクリックのデータから、 ユーザーがもっともクリックしそうな 広告・コンテンツを見つけるということ。 そのために、BigQuery上の大量の クリック・ストリームのデータを利用して、 大規模な確率モデルを訓練して、 大規模な予測を実行する。 Click Prediction
22.
Google RankBrain !!! https://goo.gl/o7RQrU 他の例より規模が一桁大きい
23.
https://goo.gl/o7RQrU 自動応答メール Smart Reply
24.
今後の展望 新しい分散処理技術と言語理解へ それらをコントロールする技術は、人間の脳が、感覚・運 動器官として相対的には独立した、眼・耳・口・ ...
をコン トロールしているのに似た、新しいハードウェアの利用を 含む、ソフトウェアだけに閉じない新しい分散処理技術の 時代の扉を開いて行くだろう。 ニューラル・ネットワークの最先端の研究は、RNN/LSTM に移行している。そこでの中心的な課題は、Sequence to Sequence と言われる、基本的には、言語理解に関 わる問題である。この分野でも、大きな展開が起きる可能 性がある。そうした飛躍が可能になれば、その応用分野 は広大である。
25.
https://goo.gl/o7RQrU Sequence to Sequence
26.
https://goo.gl/o7RQrU Sequence to Sequence
27.
我々自身がデータをもつことの重要性 機械学習の基本 基本的なデータたち
Human Computing どう、データをつくるか?
28.
機械学習の基本は、 人間の知識を機械に移転すること 機械学習の基本を確認しよう。ただ、人間の 知識を機械に移転するためには、単にマシン と大量のデータがあればいいというわけでは ない。正確にラベル付けられたデータの「作 成」と「蓄積」が不可欠。それには、人間の根 気強い、組織的な取り組みが必要。
29.
「人間には容易でも機械には難しいこと」 「機械には容易でも人間には難しいこと」 その境界は、動的に変化するのだが、いつの 時点でも、機械に提供する学習データ作りは、 前者。その段階を経なければ、機械は賢くな らない。現実的には、それぞれに要する経済 的なコストが、現実を動かす。その費用を、誰 がどう負担するのか? 以下で、基本的な学 習用データセットを見てみよう。
30.
http://yann.lecun.com/exdb/mnist/ MNIST 手書き数字のデータベース 60,000サンプル
31.
CIFAR-10 10のカテゴリーの画像データ 一つのカテゴリーに6,000枚。計60,000サンプル https://www.cs.toronto.edu/~kriz/cifar.html Tront大学
32.
ImageNet http://www.image-net.org WordNetの名詞(80,000+)に対応した画像データベース Stanford大学
33.
https://wordnet.princeton.edu/ Princeton大学
34.
The Penn Treebank
Project https://www.cis.upenn.edu/~treebank/ Pennsylvania大学 https://www.ldc.upenn.edu/
35.
The Penn Treebank
Project
36.
基本的な性格をもつオープンな データの共有が、機械学習のイノ ベーションをドライブしている 先の「データ作成のコスト」の問題に対する最 も有力な回答は、オープンなコミュニティ(大 学・学会を含む)が、基本的な性格をもつ学習 用データを公開し、それを皆が共有すること。 (日本は、どうだろう? 少なくとも日本語は、 日本がやるしかない。)
37.
Human Computing 「人間には容易でも機械には難しいこと」 Captcha 画像のラベル付け
(with Google) Duolingo ゲミフィケーションとクラウド・ソーシング
38.
人間の自由時間の利用 2003年に、ソリティアを遊んだ、人間の総時間は、 90億時間。 ある人たちは、コンピュータの無駄な計算サイク ルについて話をしているが、人間の無駄なサイク ルについては、どうなんだろう?
エンパイア・ステートビルを作るために、人間が 使った時間は、700万時間。 パナマ運河を作るために、人間が使った時間は、 2000万時間。(ソリティアの一日分以下) Carnegy Melon Univ. Luis von Ahn
39.
Most human can
pass, but current computer can not pass.
40.
http://elie.im/blog/security/five-surprising-captcha-schemes/#.UjUKt7zqH9I
41.
http://www.youtube.com/watch?v=tx082gDwGcM Human Computing /
Crowd Sourcing 2012年 Google TechTalk
42.
我々が、それぞれのドメインで持つ 知識を、きちんとデータ化すること それを機械に学習させる。量優先で質的規定 が曖昧なBig Dataではなく、優れた質をもっ た、それぞれのドメインに固有のGood Data を持つことが、より重要。ニッチでもいい。チャ ンスは、AIの応用領域の数ほど、たくさん存 在している。もちろん、その前提は、基本的な オープンなデータの存在と共有なのだが。
43.
ニューラル・ネットワーク技術の 共通の基礎 訓練と実行 グラフ表現とモジュール構造
パラメーター変更のアルゴリズム Part II
44.
ニューラル・ネットワーク技術の 共通の基礎 ニューラル・ネットワークの様々なフレーム ワークが提案されている。ただ、それらの基礎 にあるのは、共通のものだ。ここでは、次の三 点で共通性を見ることにする。 訓練の定義と実行 グラフ表現とモジュール構造
パラメーター変更のアルゴリズム
45.
訓練の定義と実行 訓練の実行 --
TensorFlowとCNTK 訓練の定義 -- TensorFlowとCNTK Part II ニューラル・ネットワーク技術の共通の基礎
46.
訓練の定義と実行 ニューラル・ネットワークの学習は、基本的には、次のような ステップからなる。 訓練の定義 推論を行うネットワーク・グラフの定義
学習、すなわち、ネットワークのパラメーターの変更を行うアルゴ リズムの定義 訓練、すなわち、データでの繰り返し学習を行う、繰り返しの定義 ... 訓練の実行
47.
訓練の実行 -- TensorFlowとCNTK 訓練の実行での、TensorFlowとCNTKのコ マンド・シーケンスを見てみよう。ここでは、ま だ、違いしか見えてこない。
48.
訓練の実行例 TensorFlow $ python
–m モデル $ python -m tensorflow.models.image.mnist.convolutional tensorflor-master/tensorflow/ 以下
49.
50.
51.
訓練の実行例 CNTK $ cntk
configFile=cntk ファイル $ cntk configFile=../Config/02_Convolution.cntk CNTK/Examples/ 以下
52.
53.
54.
訓練の定義 -- TensorFlowとCNTK TensorFlowとCNTKの訓練の定義を比較してみよう。 TensorFlowはPythonで手続きをベタに記述し、 CNTKは宣言的なDomain Specific
Languageを 使う。違いが目立つが、グラフの定義・最適化のアル ゴリズムの指定・訓練の繰り返しの指定等で、基本的 な対応が見え始める。
55.
# 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
56.
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 グラフの定義 繰り返し の指定
57.
.... 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
58.
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を参照している
59.
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 マクロを見るとネットワークの 見慣れた形が見えてくる
60.
ニューラル・ネットワークの グラフ表現とモジュール構造 DNNのグラフ表現とモジュール構造 CNNのグラフ表現とモジュール構造
RNNモジュールの数式による表現 Part II ニューラル・ネットワーク技術の共通の基礎 丸山の次の資料を参照されたい https://goo.gl/Q0mKfy
61.
ニューラル・ネットワークの グラフ表現とモジュール構造 それぞれのフレームワークごとに表現のスタ イルには違いがあるものの、重要なことは、そ れが表現しているニューラル・ネットワークの 「グラフ」は、同一のものであるということであ る。それは、基本的なモジュールの組み合わ せでできている。
62.
DNNのグラフ表現とモジュール構造 まずは、基本的な DNN (Deep
Neural Network)のグラフ表現とモジュール構造を 見ていこう
63.
ニューラル・ネットワークの例 これでも省略 されている 784->8 DNNのグラフ
64.
TensorFlowでは、複数のニューロンからなる一つの層は、 次のようなグラフで表現される。 行列 の積X W 行列 の和 b φの 適用 5つのノードがあるが、Wとbには、重みとバイアスの値が入り、 残りの3つのノードは、演算を行うノードである。この層の働きは、 φ(X・W+b) で表現される。 一つの層
65.
積X W 和 b φ 積 W 和 b φ 隠れ層の ニューロン数:15 重み WH:784x15次元 バイアス
bH:15次元 出力層の ニューロン数:10 重み WO:15x10次元 バイアス bO:10次元 入力層 隠れ層 出力層 こっちのグラフの方が、ずっとわかりやすい! 隠れ層の 入力:784 784次元 TensorFlowのグラフ
66.
TensorFlow CNTK これらのグラフは、同じものである
67.
TensorFlow CNTK これらのグラフは、同じものである
68.
TensorFlow Torch7 これらのグラフは、ほぼ、同じものである
69.
Torch7でのDNNモジュールの記述例 DNN
70.
# 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)の形を していることは、簡単に確認できる。
71.
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の中にある。
72.
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)の形を していることは、簡単に確認できる。
73.
CNNのグラフ表現とモジュール構造 現在、もっとも利用されているCNN (Convolutional Neural Network)のグラ フ表現とモジュール構造を見てみよう。CNN は、どんどん多層化しているので、こうしたア プローチは必須である。
74.
複雑なCNNのグラフ http://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf “Going Deeper with
Convolutions” Google Inception この二つを区別する!
75.
回転する モジュールからなるモジュール 複雑なCNNのグラフ
76.
回転する こ の 組 み 合 わ せ モジュールからなるモジュール 複雑なCNNのグラフ
77.
モジュールからなるモジュール の組み合わせ 複雑なCNNのグラフ
78.
複雑なCNNのグラフ モジュールからなるモジュール の組み合わせ
79.
いまは、こんなことになっている http://lsun.cs.princeton.edu/slides/Christian.pdf
80.
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)の 形をしている。
81.
次回マルレク予告 Convolutional Network 入門講座 日時: 5月13日
19:00~ 場所: TIS 西新宿 定員: 200名 Convolutional Networkは、現在のニューラル・ネットワー ク技術の中心的な技術で、また、もっとも成功した技術でもあ ります。講演では、ニューラル・ネットワークを学び始めた人を 対象に、CNNの基本をわかりやすく解説します。
82.
RNNモジュールの数式による表現 現在、もっとも活発に研究されている RNN (Recurrent Neural
Network)のモジュー ル構造を見てみよう。ただし、そのグラフ表現 は複雑であり、モジュールの数式による表現 を併用したほうが、見通しは良くなる。
83.
少し複雑なRNNのグラフの例(これは、LSTMのセ ル) σ(sigmoidのこと), tanh
は、活性化関数 次の式をグラフで 追ってみるといい。 Chris Olah "Understanding LSTM Networks" http://colah.github.io/posts/2015-08-Understanding-LSTMs/
84.
これは、CNTKの サンプルだが、グ ラフだけでは、全 容を把握するのは 難しい。
85.
86.
87.
88.
ニューラル・ネットワークの パラメーター変更のアルゴリズム Gradient Descent
Stochastic Gradient Descentと mini-batch Back Propagation Automatic Differentiation Part II ニューラル・ネットワーク技術の共通の基礎
89.
Gradient Descent ここでは、パラメータ変更の基本的なアルゴリ ズムであるGradient Descentの基本を確 認する。まずは、線形回帰の問題で考えよう。
90.
Gradient Descentの基本 損失関数を定めて、誤差を最小にするパラメータを求める 次の図で、サンプル中のi
番目の点を (x(i), y(i))とすれ ば、y=ax+b上の点と点 (x(i), y(i)) との垂直方向の誤 差は、 (ax(i)+b) – y(i) となる。 誤差は、正負の値をとるので、単純に、誤差の平均を取っ ても、打ち消しあって、全体としての誤差の大きさはわか らなくなる。 そこで、誤差の二乗をとって、その平均を最小にすること を考える。 a, b の関数である、この誤差の二乗の平均を、損失関数 とすればいい。 線形回帰の場合
91.
誤差 誤差 誤差 誤差 データの各点と、y=ax+b との誤差が、 もっとも小さくなるように、a,b の値を修正する。 (x(i),
y(i)) (ax(i)+b) – y(i) ( ax(i)+b), y(i) ) 誤差の二乗をLoss関数にする こうした形の損失関数を、 “quadratic cost” という
92.
仮説: パラメーター: a, b 損失関数: 目標: 問題の整理 y(x)
= ax + b a, b y a, b a, b
93.
損失関数 J(a, b)は、a,b
についての関数で、 この例では、次のような形をしている a b
94.
簡単にするために、二次元のグラフで考え よう。ある点から始めて、その点から極小 点に近ずくためには、どうすればいいか? 二つの場合がある。 その点が極小点の右側にある場合には、 その点のx座標を少し減らせばいい。 その点が極小点の左側にある場合には、 その点のx座標を少し増やせばいい。 その点が、極小点の右にあるか左にある かは、その点での接戦の傾きが、正である か負であるかでわかる。 よって、α を正の数値とすれば、次の式が、 より近づいた点の位置を与える。 直感的な説明 損失関数を、パラメーターで微分している
95.
どう、重みとバイアスを修正するのか? もう少し、一般的に、Gradient Descent をまとめてみよう。 損失関数をCとするとき、次の式に従って、重みWkと バイアスbl
を変更すればいい。 損失関数が、 ここで見た、quadratic costの形をしていない 場合(例えば、 Cross Entropyの場合)でも、この考え方は、 変わらない。 ηは学習率
96.
コスト関数がQuadratic Costの時の 勾配を求めてみる (線形回帰) だとして、1項だけの 場合の微分を考える
97.
j j j この式を、そのまま用いると、パラメータ更新の、基本的なアルゴリズムは、 次のようになる。この操作を、値が収束するまで何度も繰り返す。 mは、全データの数である。
98.
二項分類のLogistic回帰の場合 コスト関数 (Log Likelihood) Logitic回帰の微分も、線形回帰の場合のQuadratic
Cost の微分と同じ形になる!計算は省略したが、次の文献を参照 されたい。“CS229 Lecture notes” http://cs229.stanford.edu/notes/cs229-notes1.pdf
99.
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回帰の ネットワーク定義例
100.
101.
Stochastic Gradient Descent ここでは、まず、訓練実行の三つのスタイル、 Batch,
SDG, mini-Batch の違いを見る。 実際の応用では、mini-Batchを用いるのが 一般的である。最後に、mini-Batchも、その 確率論的性格から、SDGと呼ばれることを述 べる。
102.
変数の修正にどのくらいの時間がかかるか? 前向きの推論と比べて、約3倍の時間がかかる。
103.
Batch ・・・・・ 全てのデータ 先のパラメータ更新のアルゴリズムを、そのまま実装したもの。 すべてのデータについて前向き推論した後で、一つの更新が 行われる データの数が大きくなると、計算量とメモリー消費が巨大になり、現実的でない。
104.
Stochastic Gradient Descent(SDG) ・・・・・ こういうやり方もある。ひとつのデータについて前向き推論した後で、 一つのパラメータ更新を行う。これを、SDGという。 一つのデータのみで全てのパラメータをいじるので、収束性にやや問題がある。
105.
Mini-Batch ・・・・・ 先に見たBatchとSDGを組み合わせたスタイル。一定数のかたまりの データで推論を行った後、それに基づいてパラメータを変更する。 今の訓練の基本的スタイルである。 ミニバッチ ミニバッチ ミニバッチ
ミニバッチ
106.
Batch キレイに収束 しているが、計 算量が巨大 一回のパラメ ータ変更のた めに全データ を読み込む。 推論の結果を 蓄えるための 領域も巨大に なる
107.
Stochastic Gradient Descent 迷走気味 一回のパラメ ータ変更のた めに、一個だ けデータを読 み込む。
108.
Mini-Batch 10個のデータを読み込んで、 その結果で、パラメータを変更 することを繰り返すプログラム
109.
SDGの現在の用法 現在のMLの文脈では、SDGは、一個のデータにつき一 回全データの更新を行う前述のSDGではなく、mini- batchの処理を行う訓練のスタイルをSDGと呼ぶことが ある。下のCNTKでのSDGの定義を見て欲しい。この時 は、SDGとはmini-batchのことである。 SDGのStochasticというのは、全体のデータから少数 のデータをサンプリングして、確率的に推定をおこなうとい うこと。モンテカルロ法と同様のアプローチである。
110.
Back Propagation 前向きの推論に対して、パラメータの変更は、 勾配(Gradient)を用いて、後ろ向きに行わ れる。そのプロセスをまとめてみよう。
111.
F1(X0 , W1) Fi(Xi-1
, Wi) Fn(Xn-1 , Wn)Wn Wi W1 X0 (入力) n層のネットワークの 前向きの推論。 推論の結果を X とし よう。 簡単にするために、 バイアスの項 bi は 省略している。 Xi-1 Xi X 省略 前向きの推論
112.
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関数
113.
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
114.
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
115.
[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
116.
次のような計算グラフを考えよう。 矢印にそって、下から上に計算が進む。
117.
今、a=2, b=1 という値が入ったとしよう。 この時、各ノードでの計算は、次のようになる。
118.
この時、一つ上のノードを一つ下のノードで 偏微分すると各ノードでの計算は、次のようになる。 ∂e/∂d=cで c=3だから ∂e/∂c=dで d=2だから
119.
このように、直接隣り合った項の偏微分は簡単である。 それでは、離れた項の偏微分はどうなるだろうか? ∂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 ということなのだが
120.
このように、直接隣り合った項の偏微分は簡単である。 それでは、離れた項の偏微分はどうなるだろうか? 今度は、∂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 ということなのだが
121.
今、ノードXからノードYに三つの道 α, β,
γ が、 ノードYからノードZに三つの道 δ, ε, ζ があったとしよう。 XからZには、3*3=9通りの道がある。それらの道を、αδ のように積の形で表せば、ZをXで偏微分したものは、先に 見たように、可能な全ての道の寄与分を足し合わせたもの である。 この形の方が見やすい。
122.
123.
これは、元の例だが、これで Forward-Modeと Reverse-Modeの微分を考えてみよう。
124.
Forward-Mode Differentiation (これは、入力 bについての場合) Forward-Mode
Differentiation では、一つの特定の入力について、 全てのノードが受ける影響が計算 される。 入力パラメータの数だけ、 計算が必要。計算は 膨大になる。
125.
Reverse-Mode Differentiation Reverse-Mode Differentiation では、一つの出力について、全ての ノードが与える影響の計算は、 一回で済む。 隣り合ったノードの微分 (茶色)を計算しておけば 一つ経路上で掛け算 をし、全経路分 を足せばいい。 Reverse-Mode
Differentiationは、 Back Propagationの計算法
126.
TensorFlowとCNTK CNTKの高速化チューニング TensorFlowの大規模分散化 Part
III
127.
CNTKは、TensorFlowより ずっと早い!
128.
CNTKの高速化チューニング 1-bit Quantaized
SGD ループ検出 前向き推論の効率化 勾配計算の効率化 メモリー共有 Part III TensorFlowとCNTK
129.
1-bit Quantaized SGD 分散学習にとってのボトルネックは、通信コストである。 勾配を、1-bitまでに量子化することで、ノード間の通 信に必要なデータの量を減らす。
130.
1-bit Quantaized SGD
モデルのパラメーターや出力を量子化するよりも、勾配を 量子化する方が、はるかに安全である。(勾配の値は小さ く、いずれにしても、ノイズが多い。) 次のミニバッチに、切り捨てられた量子化の残りの部分を 持ち越すことは重要である。 更に、一つの勾配を処理している間に、double- bufferingを行う隠れた通信で、一つの勾配を送る。 勾配の同期に、O(1) 通信スケジューラーを使う。 できるだけ早く、それぞれのGPUをフル活用するために、 GPUの処理サイズに合わせてミニバッチのサイズを大きく する。
131.
パラメーター変更のアルゴリズム 勾配:損失関数をパラ メーターで微分したもの 実際の変更分は、勾配に アルファ(学習率)を掛けた ものである。 勾配の役割 学習率の影響 勾配>0の時 パラメーター を減らす 勾配<0の時 パラメーター を増やす アルファが 小さい時 アルファが 大きい時
132.
ループ検出とシーケンス長のチェック (RNNの場合) ネットワークのループを検出するアルゴリズム を開発
133.
ループ検出とシーケンス長のチェック (RNNの場合) ネットワークのループを検出する賢いアルゴリズムを開発 したので、次のようなことが可能となった。 任意のCNから、ループを見つける。
すべてのミニバッチの計算で、ループ内のノードを除外す る。 複数のシーケンスを長さごとにグループ分けする。同じ長 さのシーケンスのバッチのみをサポートするツールより、 収束の性質がいい。
134.
前向き推論の効率化 複数のノードを評価する必要がある時、重複した計算 を少なくするために、ノードにタイムスタンプをつける。
135.
複数のノードを評価する必要がある時、重複した計算を削減するために タイムスタンプを追加する
136.
複数のノードを評価する必要がある時、重複した計算を削減するために タイムスタンプを追加する ノードに余分な 計算をさせない
137.
複数のノードを評価する必要がある時、重複した計算を削減するために タイムスタンプを追加する ノードに余分な 計算をさせない
138.
勾配計算の効率化 勾配計算は、すべてのノードにとって必要なわけではない。 データノードに、patameterUpdateRequired=false と設定して、これらのノードは、needGradient=falseで あることを示す。
深さ優先の探索で、このフラグをグラフの上の方に伝播さ せる。プログラムは、次のリスト。 needGradient=true の場合のみ、勾配を計算する。
139.
深さ優先でDAG(Directed Acyclic Graph)のノードを 全て巡回して、フラグを立てる Leafノードでは、 勾配計算は、必要 ない
140.
Memory Sharing ミニバッチを通じて、同じメモリーを使う。それぞれのミニ バッチのたびに、メモリーを消したり再配置しない。
可能な場合には、計算ノードでメモリーを共有する。 実行プランを分析して、可能ならば、他のノードないしは計算で再 利用されるように、メモリーをプールに解放する。 例えば、あるノードが、子のノードの勾配をすべて計算しおえたな ら、そのノードが持っている行列は、すべて、解放できる。 大部分の場合、訓練では、メモリーを1/3から1/2削減できる。 勾配計算が必要でなければ、もっと、多くのメモリーを削減できる。
141.
メモリー共有なしだと、各ノードは、メモリーを持ち続ける。
142.
メモリー共有ありだと、各ノードは、勾配計算の一ステップが終わると、 次々にメモリーを解放してゆく
143.
メモリー共有なしだと、各ノードは、メモリーを持ち続ける。
144.
ミニバッチのあいだ、Weightのメモリーは固定され、繰り返し利用される。 それ以外のメモリーは、演算が終わるたびに解放され、再利用される。
145.
TensorFlowの大規模分散化 NIPS 2015
スライドから White Paper から GitHubから 分散TensorFlow 用語のまとめ Part III TensorFlowとCNTK
146.
2016/02/26 公開 Distributed TensorFlow
147.
一つのデバイスでのパフォーマンスは重要です。 ... しかし、最も 大きなパフォーマンスの改良は、モデル・パラレルとデータ・パラレル を備えた、大規模分散システムによってもたらされます。 Google
TensorFlowの 基本的な考え方
148.
一回の実験に必要な時間と研究の生産性 数分あるいは数時間単位 インタラクティブな研究。すぐに満足が得られる。 1〜4日 耐えられる。インタラクティブではなくなるが、代わりに複 数の実験を並行して走らせることができる。
1~4週 高い価値のある研究のみ。進行は止まる。 1ヶ月以上 やろうとも思わない。
149.
TensorFlowの分散処理 NIPS 2015 スライドから NIPS
2015のスライドから、TensorFlowの 分散処理の特徴を見ておこう。 https://media.nips.cc/Conferences/2015/tutorialslides/ Jeff-Oriol-NIPS-Tutorial-2015.pdf
150.
モデル・パラレル 訓練時間を減らす最良の方法:ステップ時間を減らす。 たくさんのモデルに、モデル固有の並行性がある。
問題は、通信がそれを妨げないように、仕事を分散させる ことである。 CNNにみられる、局所的な関連性 AlexNetが、その例だが、タワー同士は、ほとんど、あるいはまっ たく、関連を持たない。 モデルの特定の部分は、あるサンプルでしか動いていない。
151.
GPU 1 GPU 2 学習された Kernel GPU
1 GPU 2 AlexNet http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
152.
モデル・パラレルを開発するには 単一コア: 命令の並列化(SIMD)。とても自由にできる。
コアをまたぐ: スレッドの並列化。ソケットをまたがなければ、 ほとんど自由にできる、ソケットをまたぐ場合には、ソケット 間の帯域が問題になる。(IntelのQPI) デバイスをまたぐ: GPUではPCIeの帯域に、制限されるこ とがよくある。 マシンをまたぐ: ネットワークの帯域・遅延に制限される。:
153.
モデル・パラレル Model Parallelism
154.
モデル・パラレル Model Parallelism
155.
モデル・パラレル モデルをマシンをまたいで分割する
156.
モデル・パラレル モデルをマシンをまたいで分割する ネットワーク・トラフィックを 最小にする。 もっとも密に結合した領域 は、同じパーティション上に ある。
157.
データ・パラレル 同時に、異なるデータ・サンプルを処理するように、複数 のモデルのレプリカを利用する。 モデルの状態(パラメーター)の更新は、共有パラメーター・サー バー上で、全て共同して行う。
スピードアップは、モデルの種類に大きく依存する。 密なモデルでは、50のレプリカで、10から40倍のスピードアップ 疎なモデルでは、もっと多くのレプリカをサポートする。1000台も のレプリカを利用できる。
158.
データ・パラレル
159.
データ・パラレル
160.
データ・パラレル
161.
データ・パラレル
162.
データ・パラレル
163.
データ・パラレル
164.
データ・パラレルの選択 同期的に可能か? N個のレプリカは、バッチ・サイズをN倍大きくすることに等しい。
利点:勾配の計算は、常に新しい 弱点:一つのマシンが落ちた場合、リカバリーが必要なので、耐 障害性に問題がある 非同期に可能か? 利点:一つのモデル・レプリカが落ちても、それが他のレプリカを ブロックすることはないので、相対的には、耐障害性は高い 弱点:勾配が新しいとは限らないということは、その勾配が、効果 的なものではないということ モデルの計算時間が、ネットワーク上でのパラメーターの send/receiveに要する時間より大きくなるようにする
165.
データ・パラレルの成功 Googleの問題(非常に大規模なデータセット、大規模な モデル)の多くにとって、データ・パラレルは、実際に重要 である RankBrain
は、500のレプリカを使っている ImageNet Inception は、訓練に 50個のGPUを 使って、 40倍のスピードアップ SmartReply は、それぞれ複数のGPUを持つ、16の レプリカを使う 最新の学習機械 “One Billion Word” のベンチマー クモデルは、32のGPU上で、データ・パラレルとモデル・ パラレルの両方を使っている
166.
167.
168.
TensorFlowの分散処理 White Paperから 分散TensorFlowの実装は、今年公開された のだが、その仕様については、昨年の TensorFlowの公開時に発表されたWhite Paperに、既に詳しく述べられていた。 White Paperの記述を振り返ろう。 http://download.tensorflow.org/paper/whitepaper2015.pdf 丸山訳
https://goo.gl/z6pQV8
169.
170.
デバイス
171.
デバイスの名前 デバイスの名前は、デバイスの型(CPU/GPU)とワーカー の中でのデバイスのインデックスを含む。 分散設定では、ワーカーのジョブとタスクを指定する。(プ ロセスに対してデバイスがローカルな場合には、 localhostが用いられる)
デバイス名の例は、次のようになる。 "/job:localhost/device:cpu:0" "/job:worker/task:17/device:gpu:3"
172.
複数デバイスでの実行の課題 システムが複数デバイスの場合、主に二つほど厄介なこ とがある。 ノードの配置:一つは、グラフ上のそれぞれのノードにつ いてどのデバイスを実行配置につかさせるかを決定する ことである。(ノードとデバイスの対応付け)。
デバイス間通信:もう一つは、その後で、この配置決定 によって導かれるデバイスの境界をまたいで要求される データ通信を管理することである。
173.
ノードの配置 配置アルゴリズムは、最初に、そのグラフ実行のシミレー ションを走らせる。このシミレーションは、グラフ中のそれ ぞれのノードについて、 greedy
heuristics を使って一 つのデバイスを選択して終わる。このシミレーションで生 成された、ノードのデバイスへの配置は、実際の実行での 配置でも利用される。 TensorFlowのクライアントは、ノードについて、どのデバ イスが実行可能かについての部分的な制約条件を与える ことで、デバイス上のノードの配置をコントロールできる。 例えば、”このノードは、GPUタイプのデバイス上にのみ置 くこと” とか “このノードは、 /job:worker/task:17 内 の任意のデバイス上に置くことができる” とか “このノード は、variable13 という名前のノードと同じマシン上に置く こと” 等々。
174.
デバイス間通信 いったんノードの配置が計算されると、グラフはデバイス ごとに部分グラフの集合に分割される。xからyへの全て のデバイスをまたぐエッジは削除され、xからxの部分グラ フ内の新しいSendノードへのエッジに、また、対応する Receiveノードからyの部分グラフ内のyへのエッジに置き 換えられる。このグラフの変形については、次の図を見て ほしい。
175.
Send/Receive ノードの挿入
176.
分散実行 グラフの分散実行は、複数のデバイスでの実行に、とても よく似ている。デバイスの配置後に、デバイスごとに部分 グラフが生成される。ワーカープロセスをまたいで通信す るSend/Receiveノードのペアは、マシン境界をまたいで データを移動するのに、TCPまたはRDMAといったリモー ト通信のメカニズムを利用する。
177.
データ・パラレルな訓練 SGDをスピードアップする最も単純なテクニックは、ミニ バッチ要素間をまたぐミニバッチの勾配計算をパラレル化 することである。例えば、1000要素のサイズのミニバッチ を使っていたとすると、モデルの10個のレプリカを使って、 その各々に100要素の勾配を計算させることができる。そ の後、あたかも、1000要素のサイズのバッチを持つシー ケンシャルなSDGアルゴリズムの実行のように正確に振 る舞うために勾配を結合して、パラメーターを同期して更 新をかける。この場合では、TensorFlowのグラフは、単 純に、グラフの一部がたくさんのレプリカを持つだけである。 それが、大量のモデル計算を行う。この大規模なグラフの 訓練用のループ全体をクライアントの単一のスレッドがド ライブしている。図7の上の図が、これを図示している。
178.
同期型と非同期型の データ・パラレルな訓練
179.
モデル・パラレルな訓練 モデル・パラレルな訓練では、モデルの異なった部分の計 算が、サンプルの同じバッチのために、異なる計算デバイ ス上で同時に行われる。これも、容易にTensorFlowで表 現できる。図8は、シーケンスからシーケンスの学習に使 われるリカレントでディープなLSTMモデル([47])が、三 つの異なるデバイス上でパラレルに実行される様子を示 している。
180.
モデル・パラレルな訓練
181.
モデル計算のパイプラインのための 並行ステップ ディープ・ニューラル・ネットワークの訓練で、もっと性能を 引き出すためによく使われるもう一つの別の手法は、同じ デバイス内で、モデルの計算をパイプライン化することで ある。同じデバイスのセットの内部で、複数の少数の並行 ステップを走らせる。図9にその様子を示す。これは、どこ か非同期のデータ・パラレル処理に似ている。異なったデ バイス上に計算グラフのレプリカを作るのではなく、同じデ バイス上でパラレル計算が行われることを除いては。この アプローチは、サンプルの単一のバッチの計算では、この 単一のステップの間に、すべてのデバイスをすべての時 間完全に使い切ることができない場合、「タイルの隙間を 埋める」ことを可能にする。
182.
Concurrent steps
183.
TensorFlowの分散処理 GitHubから 今年の分散TensorFlowの実装の公開時に、添付さ れたドキュメントを紹介する。分散TensorFlowプログ ラミングの具体的なイメージがわくと思う。 https://github.com/tensorflow/tensorflow/blob/master/ tensorflow/g3doc/how_tos/distributed/index.md
184.
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 を作る。こうして、それぞれが同じクラスター定義を持 つ複数のプロセスを走らせる。
185.
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
186.
# 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 の使い方
187.
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で 訓練を実行
188.
訓練のレプリカを作る よく使われる訓練の設定(データ・パラレル)では、同じモ デルを訓練するワーカーのジョブに、たくさんのタスクが含 まれている。この設定では、一つ(あるいは複数)の parameter serverのジョブのタスクが保持する、共有 パラメータを利用する。
それぞれのタスクは、典型的には、 異なるマシンで走るだろう。 こうした構造を指定するやり方が、TensorFlowにはたく さんあって、我々は、モデルのレプリカを指定するのを簡 単にするライブラリーを構築中である。 可能なアプローチには、次のようなものがある。
189.
非同期型の訓練 一つのパラメータの集合を含む、単一のグラフを構築する。 (tf.Variable ノードは、パラメータ・サーバー
/job:psに 割り当てられる。) この「モデル」の複数のコピーが、ワー カー /job:worker 内の異なったタスクに割り当てられる。 このモデルのそれぞれのコピーは、異なったtrain_op を 持つことができる。そして、それぞれのワーカー i で、一 つ以上のクライアントのスレッドが、 sess.run(train_ops[i]) を呼び出すことができる。 これは、非同期型の訓練の実装である。このアプローチ は、そのターゲットがクラスター内のワーカーの一つであ るような、単一のtf.Sessionを利用する。
190.
191.
同期型の訓練 ノードの配置は先と同じだが、同期型の訓練の実装では、 すべてのワーカーからの勾配は、平均化される。このタイ プのレプリカの例については、 CIFAR-10
multi-GPU trainer を参照のこと。 例えば、300要素のサイズのミニバッチを使っていたとす ると、モデルの3個のレプリカを使って、その各々に100要 素の勾配を計算させることができる。その後、あたかも、 300要素のサイズのバッチを持つシーケンシャルなSDG アルゴリズムの実行のように正確に振る舞うために、勾配 を結合して、パラメーターを同期して更新をかける。
192.
3 3 m+1 2 3 2m+1 m m m A
B C A B Cミニバッチのデータを 3分割して3台で処理 3台のマシンでの勾配計算 データと式の分割 3m データの分割 式の分割 3 3 3
193.
A B C 同期型のデータ・パラレル 3台のレプリカ・モデルでの勾配計算の分割 ミニバッチのデータを3分割 して、同じモデルのレプリカ を持つ3台で処理。 パラメータ・サーバーが、 その結果を足し合わせて、 パラメータを更新する。
194.
分散型訓練 分散型訓練(“distributed trainer”)
アプローチで は、ワーカー毎に一つのグラフをもたせ、複数のグラフを 利用する。ワーカー毎のそれぞれのグラフは、次の二つを 含んでいる。パラメータの集合が一つ(/job:psに割り当 てられる)、あと一つは、モデルのコピーが一つ(特定の /job:worker/task/i に割り当てられる)である。 異なったグラフ間で変数を共有するために、コンテナーの メカニズムが利用される。すなわち、それぞれの変数が構 築される時、グラフのそれぞれのコピーで同じ値を持つ、 オプショナルなコンテナーの引数が指定される。 大きなモ デルでは、全体的なグラフはより小さいので、この方法は、 より効率的に機能する。
195.
分散型訓練 このアプローチは、複数の tf.Session
オブジェクトを利 用する。ワーカー毎に、一つのプロセスがあって、それぞ れのターゲットは、異なるワーカーのアドレスである。 tf.Session オブジェクトは、すべて単一のPythonクライ アントで生成することができる。あるいは、訓練の負荷を もっとうまく分散するために、複数のPythonクライアントを 利用することもできる。
196.
[Appendix] 分散TensorFlow 用語のまとめ
197.
Client クライアントは、典型的には、TensorFlowのグラフを構 築し、クラスターと相互作用するために、 `tensorflow::Session`を構成するプログラムであ る。クライアントは、典型的には、 PythonかC++で書か れている。単一のクライアント・プロセスは、複数の TensorFlowサーバーと直接に相互作用することが出来 る(先の「訓練のレプリカを作る」を参照のこと)。そして、 単一のサーバーは、複数のクライアントにサービスを提供 することが出来る。
198.
Cluster TensorFlowのクラスターは、名前が付けられたジョブの 集合に分割された、一つ以上のTensorFlowサーバーか ら構成される。 名前が付けられたジョブは、今度は、タス クのリストで構成される。クラスターは、典型的には、たくさ んのマシンをパラレルに走らせる、ニューラル・ネットワー クの訓練のような、特定の高レベルの目的のために利用 される。
199.
Job ジョブは、典型的には、共通の目的にサービスを提供する、 タスクのリストから構成される。例えば、ps (parameter server
の略)と名付けられたジョブは、典型的には、変数 を格納し更新するノードをホストとして含んでいる。一方、 worker と名付けられたジョブは、典型的には、計算中心 の状態を持たないノードをホストとして含んでいる。ジョブ の中のタスクは、典型的には、異なったマシン上で走る。
200.
Master service マスター・サービスは、分散したデバイスの集合にリモート アクセスを提供するRPCサービスである。このマスター・ サービスが、
tensorflow::Session インターフェースを 実装する。 そして、一つ以上のワーカー・サービスをまた いだ仕事の協調に、責任を持つ。
201.
Task タスクは、典型的には、単一のTensorFlowサーバー・プ ロセスに対応する。タスクは、特定のジョブに属し、ジョブ のタスクのリストの中で、特定のインデックスを持っている。
202.
TensorFlow server TensorFlowサーバーは、
tf.GrpcServer インスタンス を走らせているプロセスである。それは、クラスターのメン バーで、「マスター・サービス」と「ワーカー・サービス」を外 部に提供する。
203.
Worker service ワーカー・サービスは、そのローカルなデバイスを利用して、 TensorFlowグラフの一部分を実行する、RPCサービスで ある。ワーカー・サービスは、worker_service.proto
を 実装している。
204.
次回マルレク予告 Convolutional Network 入門講座 日時: 5月13日
19:00~ 場所: TIS 西新宿 定員: 200名 Convolutional Networkは、現在のニューラル・ネットワー ク技術の中心的な技術で、また、もっとも成功した技術でもあ ります。講演では、ニューラル・ネットワークを学び始めた人を 対象に、CNNの基本をわかりやすく解説します。
Télécharger maintenant