Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Deeplearning4j 入門
Search
benjamin
October 30, 2016
Technology
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Deeplearning4j 入門
ビッグデータ分析技術勉強会で発表した内容です。
http://futureofdata.connpass.com/event/40079/
benjamin
October 30, 2016
More Decks by benjamin
See All by benjamin
ShareDocs の紹介
jamin
0
360
Other Decks in Technology
See All in Technology
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
330
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
160
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
2
460
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
1
370
What the customer really needed
kawaguti
PRO
3
200
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
0
130
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
110
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
500
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
170
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
2k
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
2.8k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
670
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
910
Making the Leap to Tech Lead
cromwellryan
135
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Embracing the Ebb and Flow
colly
88
5.2k
Speed Design
sergeychernyshev
33
2.1k
Discover your Explorer Soul
emna__ayadi
2
1.3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
The browser strikes back
jonoalderson
0
1.7k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
So, you think you're a good person
axbom
PRO
2
2.2k
Google's AI Overviews - The New Search
badams
0
1.6k
Transcript
Deeplearning4jの概要 with 野球 Hack 2016.10.24 ビッグデータ分析技術勉強会 株式会社アットウェア 三嶋拓
発表へのモチベーション KaggleのサイトにMLBの試合データがありますよ。野球なら大体の人 が抵抗なく取り組めるドメイン だと思います。 僕は野球の試合とか全然見ないですが大丈夫ですかね。流行りの Deeplearningで一発当てるとかは夢がありますが。 そこは野球に詳しい人に助けてもらってください。あと、そんな簡単に うまくいかないと思いますが、やるなら Deeplearning4jとか素振りし てもらえると助かります。投球を系列データとして扱って
RNNで学習 するのを目標にするとか。 なるほど...... 機械学習に取り組みやすいかつ面白いデータないかなー。
ということで • 機械学習を勉強するための身近なネタを投稿して 界隈を盛り上げたい! • Pythonのライブラリが凄く使えるのはよく聞くが それ以外で比較的扱い慣れてる言語や実行環境で 素振りしておきたい! 発表へのモチベーション
目次 • DL4Jの紹介 ◦ 概要 ◦ MNISTのサンプルコード ◦ RNNのサンプルコード •
野球Hack ◦ 扱うデータ ◦ 特徴量 ◦ RNNで学習 ◦ 結果 • まとめ • その他
目次 • DL4Jの紹介 ◦ 概要 ◦ MNISTのサンプルコード ◦ RNNのサンプルコード •
野球データ解析 ◦ 扱うデータ ◦ 特徴量 ◦ RNNで学習 ◦ 結果 • まとめ • その他
DL4J • Javaで実装されたDeeplearningライブラリ • 2014年にSkymindがオープンソースとして公開 • Skymindの創設者の一人Adam Gibsonさん主導で開発 • SparkやHadoop上で動作させることが可能
• GPUを使った処理が可能 • プロダクションでの運用を意識 • 最新安定版は0.5.0(9/17には0.6.0がリリース)
DL4J 出典:https://www.youtube.com/watch?v=R3lzuXPbybY
DL4J • ND4J ◦ JVM上で動作する科学計算ライブラリ ◦ Numpy for JVM ◦
DL4Jの計算処理を支えている • DataVec ◦ 機械学習向けのETLライブラリ ◦ データの前処理などに利用する 出典:http://www.slideshare.net/jpatanooga/deep-learning-and-recurrent-neural-networks-in-the-enterprise/17
MNISTの実装例 • おなじみの手書き文字認識のサンプル • 0~9の数字の手書き文字画像のデータセット • 1枚の画像は28 × 28ピクセル •
学習用60,000サンプル、テスト用10,000サンプル 3 0 4 9 形状や画質に違いがある手書き文字画像から 書かれている数字を判断する 出典:https://deeplearning4j.org/mnist-for-beginners
MNISTの実装例 • Scalaのサンプルコード ◦ https://github.com/kogecoo/dl4j-examples-scala/blob/master/dl4j-example s/src/main/scala/org/deeplearning4j/examples/feedforward/mnist/MLPMni stSingleLayerExample.scala ・ ・ ・
・ ・ ・ ・ ・ ・ Denseayer OutputLayer DataSet DataSetIterator MultiLayerNewtork Evaluation DataSet DataSetIterator
MNISTの実装例 ー ネットワークの設定 ー ビルダー・パターンでネットワークを設定
MNISTの実装例 ー ネットワークの設定 ー レイヤを追加 設定完了
MNISTの実装例 ー 学習&評価 ー モデルを初期化 繰り返し学習 テストデータで評価 ND4JのDataSetを 返すイテレータ
MNISTの実装例 ー 実行結果 ー 学習初期 テストデータで評価
MNISTの実装例 ー 学習経過の可視化 deeplearning4j-ui ー • Web UIが立ち上がって学習過程をリアルタイムで可視化できる • 各レイヤのパラメータ
Control Chartの分類の実装例 • Recurrent Neural Network (RNN) ◦ 時系列データを扱いたい場合に適している ◦
文章の生成、音声認識、etc...
• Scalaのサンプルコード ◦ https://github.com/kogecoo/dl4j-examples-scala/blob/master/dl4j-example s/src/main/scala/org/deeplearning4j/examples/recurrent/seqClassification /UCISequenceClassificationExample.scala Control Chartの分類の実装例 Time Series
(sequence) Input Hidden Layer Output Layer Normal Cyclic Increasing Trend Decreasing Trend Upward Shift Downward Shift
• 入力は サンプル数 × feature数 × sequenceの長さ の3次元をもつDataSet • DataSetの中には
label、feature、label mask、feature mask を持つ • labelやfeatureなどは INDArrayとして表される 出典:https://deeplearning4j.org/usingrnns Control Chartの分類の実装例
出典:https://deeplearning4j.org/usingrnns Control Chartの分類の実装例 Many to Many Many to Many One
to Many Many to One • データの性質や解きたい問題に応じてデータの構造を変える 画像への見出しづけ 自然言語処理 文章の生成 感情分析
出典:https://deeplearning4j.org/usingrnns Control Chartの分類の実装例 • 各データの構造に応じてMaskを用意 • Maskはsequenceの長さと同じ長さを持つ配列 • Maskが0の部分は学習や評価に使われない •
時系列のデータは準備が少し面倒だが、この辺りの面倒なことを引き受けてくれる クラスが用意されている
Control Chartの分類の実装例 • SequenceRecordReaderDataSetIterator ◦ データ構造の調整や Maskの作成など面倒なことを引き受けてくれる ◦ サンプル毎にsequneceの長さが異なっていても調整してくれる •
分類したいラベルは 0始まりのインデックス ◦ 上記のIteratorがone-hot-encodingされたベクトルに変換してくれる • labelとfeatureは別々のファイルでも一緒のファイルでもどちらでも良いが できることが異なってくる
Control Chartの分類の実装例 隠れ層にLSTMを 指定 出力層を指定
Control Chartの分類の実装例 epoch毎にイテレータをリセットする
Control Chartの分類の実装例 学習初期 学習終了時点
ここまでのまとめ • サンプル自体は簡単に動かせる • DL4Jではビルダー・パターンを使ってネットワークを組み立てる • ネットワークを組み立てるときは使用したいニューラルネットワークに対応したクラ スを指定する • 評価結果を簡単に確認することができるメソッドが用意されている
• 時系列データを扱う場合はデータ構造に注意
目次 • DL4Jの紹介 ◦ 概要 ◦ MNISTのサンプルコード ◦ RNNのサンプルコード •
野球データ解析 ◦ 扱うデータ ◦ 特徴量 ◦ RNNで学習 ◦ 結果 • まとめ • その他
野球Hack ー やりたいこと ー • ある投手が次に投げる球種を予測したい • 予測してお金儲けシミュレーションとかできると面白そうだと 思った •
キャッチャーの気持ちになってどうやってピッチングをリードす るかを考える
野球Hack ー MLBAMのデータ ー • Shinichi-Nakagawa/pitchpx ◦ https://github.com/Shinichi-Nakagawa • MLBAMが公開している野球の試合データを収集できる
pythonライブラリ • PITCHf/xのデータも含まれている
野球Hack ー MLBAMのデータ ー 投球開始前の走者位置 ex) ___ , 1__ ,
_2_ , __3 , 123 アウトカウント 球種 ゾーン [1-9,12-14] 投球判定 ex) S, B ボール/ストライクカウント ex) SBSX 投球判定詳細 ex) strike out, swing out 試合年月 yyyy 試合年月 MM 試合年月 dd イニングカウント ピッチャーのMLB ID バッターのMLB ID バッターの利き手 L or R ピッチャーの利き手 L or R 投球開始後の走者位置 ex) ___ , 1__ , _2_ , __3 , 123 投球判定履歴 球種履歴 レギュラーシーズンフラグ プレーオフフラグ 球場ID 球場名 球場場所 本塁からみたピッチャーの位置 本塁からピッチャーまでの距離 [40,50,55] 本塁(ホームプレートの先端)に到達した時の球速 ストライクゾーンの上端 ストライクゾーンの下端 球が本塁に達した時の中央からの距離 球が本塁に達した時の地上からの高さ リリースポイント リリース直後の球速 リリース時の球速 リリース時の球の加速度 回転方向 0 ~ 360 投げた直後の回転速度 break lengthから本塁までの距離 BRK量につかう距離の最大最 PFX量の左右のブレ PFX量の上下のブレ
野球Hack ー 予測に使う特徴量 ー • 投手に関する特徴量 ◦ 投手の球種配分(過去1年分から計算) ▪ 例)
ストレート:70%、カーブ:20%、スライダー:10%など ◦ 投手のコース配分(過去1年分から計算) ▪ コースを9分割してそれぞれのコースへの投球割合を計算 • 打者に関する特徴量 ◦ コース毎の打率 ▪ コースを9分割して打率を計算(過去1年分から計算) ◦ 球種毎の打率(過去1年分から計算) ◦ カウント毎の打率 • ボール、ストライクのカウント • アウトカウント • ベース上のランナー
野球Hack ー 予測したい球種(ラベル) ー CH チェンジアップ CU カーブ EP スローボール FA ストレート FF フォーシームのストレート FT ツーシームのストレート
FS ファーストボール FC カットボール SI シンカー SL スライダー KC ナックルカーブ KN ナックルボール
野球Hack • Apache Zeppelinでピッチャー毎の球種配分を見てみる ◦ ストレート(青色)の割合が比較的多い傾向にある 2014年のデータ1年分 2015年のデータ1年分
野球Hack • MLBAMのデータは2007年〜2015年のものを取得 ◦ 全部で400万レコード ◦ このうち、一年毎に投手/打者の情報をサマリー ◦ 投手/打者の組み合わせが合う分だけを取得 •
打席をsequenceの単位としてファイルごとに分割 • 2014年のデータで学習 • 2015年のデータで評価 • Accuracyのベースライン ◦ 球種を全てストレートと予測した場合 ◦ テストデータ中のストレートの割合:0.435
野球Hack ー 学習の条件 ー • 特徴量:92次元 • 学習データ:約117,000打席 (ビッグじゃなくてすいません) •
評価データ:約145,000打席 • Control Chartと同じネットワーク • LSTMのユニット数を64に設定
野球Hack ー 結果 ー • drop outを入れたり、パラメータを変えたりしたが 上記が限界でした...... epochs Accuracy
野球Hack ー 結果 ー ちなみに Keras + Theano で Elman
Net を組むと epochが50回でAccuracyが約0.686 同様にLSTMを組むと epochが50回でAccuracyが約0.737 ただし、学習データに対してもテストデータに対しても Accuracyがそんなに高くないため、特徴量が全然足りていないと思う
目次 • DL4Jの紹介 ◦ 概要 ◦ MNISTのサンプルコード ◦ RNNのサンプルコード •
野球データ解析 ◦ 扱うデータ ◦ 特徴量 ◦ RNNで学習 ◦ 結果 • その他 • まとめ
今後のロードマップなど • 今秋予定のアップデート ◦ ScalNet Scala API ▪ Kerasライクの高レベルAPIが使えるようになる ▪
https://github.com/deeplearning4j/ScalNet ◦ Kerasの設定ファイルをロードできるようになる ▪ Kerasで試したものからの移行がしやすい ▪ 他のAPIに切り替えた時もコードの変更が少ない ◦ Convalutional Generative Adversarial Networks ▪ 画像の自動生成で有名 ▪ http://www.slideshare.net/DaisukeOkanohara/dnn-62218756/12 ◦ モデルのinterpretabilityの向上 ▪ Listenerで収集されるモデルのパラーメータやスコアのなどが充実する
DL4J on Sparkについて • dl4j-spark-mlはabandoned • つまづいても情報がほとんど見つからない • 環境構築でつまづいた時に幾つか参考になる日本語のサイトがあった ◦
http://amaya382.hatenablog.jp/entry/2016/06/04/202149 ◦ http://anopara.net/2016/09/14/deeplearning4jの問題点とkerasの使い勝手/ ◦ ライブラリの依存関係 • Spark2.0には対応していない(暫くはないとAdam Gibsonさんがgitterで公言) • 時系列データはファイルごとにsequeneが分かれていると、Sparkでファイルをパー ティションの単位にしてくれるのでデータが扱いやすい • Sparkで先にデータを作っておくか、DL4J側で作るか ◦ DataVecがあるのでDL4J側でも良さそう • DataSetIteratorがSparkで使えそうなものがない ◦ シングルマシンで試した後はコードに変更が入る ◦ Many-to-Manyのケースは対応していなかった • パラメータチューニングは時間がかかるのでGrid Searchを使ってSpark&GPU環 境で動かせた方が捗る
まとめ • JavaやScalaでDeeplearningをやってみたいならDL4J一択ではあるが、まだお 手軽に実装できるという感覚はないので、モデル作りを試すのはpythonのフレーム ワークを使ったほうが効率的かもしれない • サンプル自体は結構あるし、ドキュメントも豊富なのでやり通すだけでもためにはな りそう • Scala
DSLを使ってKerasライクに手軽にコードを書けるScalNetを開発中のような ので今後に期待したい • 最新の0.6.0になってもSpark上で動かすだけでも一苦労があったのでまだ十分に 利用できるとは言えない • 困ったらgitterで過去の質問履歴をみるか直接質問する
参考資料など • DL4Jのgitter ◦ https://gitter.im/deeplearning4j/deeplearning4j • ニューラルネットワークで時系列データの予測を行う Qiita ◦ http://qiita.com/icoxfog417/items/2791ee878deee0d0fd9c
• わかるLSTM ~最近の動向と共に~ Qiita ◦ http://qiita.com/t_Signull/items/21b82be280b46f467d1b • sbtを使ってDeeplearning4jをSparkで動かす ◦ http://amaya382.hatenablog.jp/entry/2016/06/04/202149 • Deeplearning4Jの問題点とKerasの使い勝手 ◦ http://anopara.net/2016/09/14/deeplearning4jの問題点とkerasの使い勝手/
参考資料など • SeanLahman ◦ http://www.seanlahman.com/baseball-archive/statistics/ ◦ 選手のセイバーメトリクスなどのマスタデータ ◦ 選手の強さごとにグルーピングやフィルタしたい場合に利用 •
野球関連指標解説 ◦ http://baseballconcrete.web.fc2.com/glossary.html#rc • 野球英語用語集 ◦ http://baseballmonster.nobody.jp/word/english/az.html • pitch speed vs spin deflection angle ◦ https://fastballs.files.wordpress.com/2010/05/soria_speed_vs_spin_force. jpg • PITCHf/x - Wikipedia ◦ https://ja.wikipedia.org/wiki/PITCHf/x • Break versus Movement ◦ http://baseballanalysts.com/archives/2009/09/break_versus_mo.php
ベンチマーク 出典:http://www.slideshare.net/SparkSummit/which-is-deeper-comparison-of-deep-learning-frameworks-on-spark/17
DL4Jのgitter 出典:https://gitter.im/deeplearning4j/deeplearning4j