Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaでDeep Learningしよう
Search
radiocat
September 27, 2017
Technology
0
590
JavaでDeep Learningしよう
radiocat
September 27, 2017
Tweet
Share
More Decks by radiocat
See All by radiocat
アジャイルを支える心理的安全性の守破離 / Psychological safety for Agile
radiocat
1
520
経験ゼロからはじめる!10年以上続くプロダクトのアウトカム創出戦略 / Challenges of product management
radiocat
1
3.9k
変化の時代に活かす「みんなのプロジェクトマネジメント」 / Utilize project management for change
radiocat
0
1.4k
「中小企業のエンジニアチームを”楽”にする」を目指す組織マネジメントの変わる勇気と変えない勇気 / Challenge to Scrum 4
radiocat
2
2.8k
関西的なノリで変化の波をノリこなすチームの取り組み / 3 Steps and Kansai-soul to Riding the Waves of Change
radiocat
2
2.5k
スクラムちゃうがなと言われてもやってみぃひん? / Challenge to Scrum 3
radiocat
4
8k
Re:ゼロから始めるアジャイル開発 / restart agile
radiocat
3
1.5k
スクラム開発について / What is Scrum?
radiocat
0
400
アウトプット駆動読書術実践入門 / The Output-driven Reading Techniques 2
radiocat
2
660
Other Decks in Technology
See All in Technology
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
290
DevOpsDays History and my DevOps story
kawaguti
PRO
9
2.5k
ServiceNow Knowledge Learning Rise up
manarobot
0
210
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
200
非同期推論システムによるコスト削減と信頼性向上
koki_nishihara
0
250
エンジニアのキャリアをちょっと楽しくする3本の軸/Three Pillars to Make an Engineer's Career More Enjoyable
kwappa
0
2.7k
私が trocco を推す理由
__allllllllez__
1
220
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
210
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
1.3k
生産性向上チームの紹介
cybozuinsideout
PRO
1
870
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
25
5.8k
Clear Off the Table
cherdarchuk
84
310k
The Cult of Friendly URLs
andyhume
74
5.7k
Designing for humans not robots
tammielis
248
25k
The Art of Programming - Codeland 2020
erikaheidi
42
12k
Thoughts on Productivity
jonyablonski
58
3.8k
Practical Orchestrator
shlominoach
182
9.7k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
We Have a Design System, Now What?
morganepeng
43
6.8k
Ruby is Unlike a Banana
tanoku
96
10k
Agile that works and the tools we love
rasmusluckow
325
20k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Transcript
Javaで Deep Learningしよう もくもく発表会 2017.9.27 / @radicoatz
本日のテーマ DL4Jを使ってJavaでも Deep Learningができるよ
「Deep Learning Javaプログラミング」購入 http://amzn.asia/fhPjlzC
読書会に参加 https://osaka-prg-school.connpass.com/event/54057/
まずは 書籍の内容をざっくり紹介
DL以前の基礎知識 1. 人工知能とディープラーニングの変遷 ➢ DL誕生までの歴史的背景について • 人工知能技術の変遷について • 機械学習が直面した問題 •
AIの第一次ブーム〜第三次ブーム • ディープラーニングの誕生 2. 機械学習アルゴリズムを学ぶ - ディープ ラーニングへの準備 ➢ 機械学習の基礎とDL前夜のアルゴリズムに ついて • 教師あり学習と教師なし学習 • サポートベクトルマシン • ニューラルネットワーク • パーセプトロン • 多層パーセプトロン
DLのアルゴリズムの解説 3. ディープラーニング探求 <1> ➢ DLの基本となるアルゴリズムの解説 ➢ 数式の理論とそれをJavaコード化したサンプ ルプログラムの解説 •
ニューラルネットワークの問題点 • ディープビリーフネット • 積層デノイジング・オートエンコーダ 4. ディープラーニング探求 <2> ➢ 前章を発展させたDLアルゴリズムの解説 ➢ 理論とサンプルコードによる解説 • ドロップアウト • 畳み込みニューラルネットワーク • ニューラルネットワーク • パーセプトロン • 多層パーセプトロン
DL4Jの解説/DLの応用と今後の展望 5. JavaライブラリDeeplearning4jの活用 ➢ ライブラリの紹介 ➢ サンプルコードによる実装方法の解説 • DL4JとND4Jの概要 •
ND4Jによる実装 • DL4Jによる実装 6. ディープラーニングの応用と実用化 ◦ DLの活用事例 ◦ DLの課題 7. ディープラーニング探求 <3> ◦ Java以外のライブラリの紹介 8. 今後の動向を展望する ◦ AlphaGoなどの事例 ◦ DL動向の情報源 サンプルコード https://book.impress.co.jp/books/1115101146#box-download https://github.com/radiocat/DLJ
ND4J/DL4Jを使ってみる
DL4J(Deeplearning4j)とは • https://deeplearning4j.org/index.html • JavaのDeepLearningライブラリ • Apache 2.0ライセンスのOSS • CPUとGPUをサポート
• Skymind社が中心となって開発 関連ライブラリ:ND4J(N-Dimensional arrays 4j) • http://nd4j.org/getstarted.html • 行列操作などに使う科学的計算ライブラリ( PythonのNumpyのようなツール) • Numpyの2倍の速さ
サンプルプログラム DL4Jのクイックスタートガイドを参照( https://deeplearning4j.org/ja/quickstart) 必須要件 • Java 7+ • Maven 3.2.5+
• Git(サンプルプログラムの取得) サンプルコードの取得と事前準備 $ git clone
[email protected]
:deeplearning4j/dl4j-examples.git $ cd dl4j-examples/ $ mvn clean install
• 取得したサンプルコードの nd4j-examples フォルダ以下 • 全部で12個のサンプル 行列の定義 • 2行3列のゼロの行列⇒ INDArray
nd1 = Nd4j.zeros(3, 2); • 2行3列⇒ INDArray nd2 = Nd4j.create(new float[][]{{1,2,3},{4,5,6}}); 演算 • 和: INDArray nd3 = nd1.add(nd2); • 差: INDArray nd3 = nd1.sub(nd2); • スカラー: INDArray nd3 = nd1.mul(10); • 内積: INDArray nd3 = nd1.mmul(nd2); ND4J
DL4J • サンプルコードの dl4j-examples フォルダ以下 • 豊富なサンプル DLのモデル構築に集中できるフレームワーク • 基本的にはNeuralNetConfigurationでBuilderパターンを使う
• CSVや画像からベクトルへの変換はフレームワークがサポート • UIツールもある https://deeplearning4j.org/ja/visualization その他の特徴 • Apache Spark対応 https://deeplearning4j.org/spark • Kotlinでの実装 https://github.com/deeplearning4j/dl4j-examples/tree/master/dl4j-examples • Androidへのビルド https://deeplearning4j.org/android
おなじみMNIST(MLPMnistSingleLayerExample) MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(rngSeed) //include a random
seed for reproducibility // use stochastic gradient descent as an optimization algorithm .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) .iterations(1) .learningRate(0.006) //specify the learning rate .updater(Updater.NESTEROVS) .regularization(true).l2(1e-4) .list() .layer(0, new DenseLayer.Builder() //create the first, input layer with xavier initialization .nIn(numRows * numColumns) .nOut(1000) .activation(Activation.RELU) .weightInit(WeightInit.XAVIER) .build()) .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD) //create hidden layer .nIn(1000) .nOut(outputNum) .activation(Activation.SOFTMAX) .weightInit(WeightInit.XAVIER) .build()) .pretrain(false).backprop(true) //use backpropagation to adjust weights .build(); TensorFlowの場合:https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/tutorials/mnist/mnist_softmax.py
まとめ • Javaのコードが書ければDLのモデルを構築できる • CSVや画像データの入力、行列演算などよく使う処理はフレームワークが提供してくれる • CUP/GPU対応など他のライブラリと比較してパフォーマンスも充分出せる • 難しい数式を書く必要はない •
DLのアルゴリズムの知識とモデル構築の設計力は必要 • 新しいアルゴリズムにも随時追従している • 困ったらSkymind社がサポートしてくれる
DEMO
参考 • Deeplearning4j /https://github.com/deeplearning4j • DeepLearning4Jの紹介 - Qiita / https://qiita.com/wmeddie/items/8f036e3eadfa3e012eed
• MNIST For ML Beginners | TensorFlow /https://www.tensorflow.org/get_started/mnist/beginners • ND4J - Javaでベクトルとか行列を定義する - 覚えたら書く / http://blog.y-yuki.net/entry/2017/01/03/000000 • ブログも書きました ◦ 【勉強会メモ】オオサカプログラミングスクール「 Javaerだらけのディープラーニング研究会 第5章」 - radioc@? / http://radiocat.hatenablog.com/entry/2017/09/20/000000