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
660
JavaでDeep Learningしよう
radiocat
September 27, 2017
Tweet
Share
More Decks by radiocat
See All by radiocat
EMの仕事、あるいは顧客価値創出のアーキテクト
radiocat
0
170
アジャイルを支える心理的安全性の守破離 / Psychological safety for Agile
radiocat
1
770
経験ゼロからはじめる!10年以上続くプロダクトのアウトカム創出戦略 / Challenges of product management
radiocat
1
4.4k
変化の時代に活かす「みんなのプロジェクトマネジメント」 / Utilize project management for change
radiocat
0
1.7k
「中小企業のエンジニアチームを”楽”にする」を目指す組織マネジメントの変わる勇気と変えない勇気 / Challenge to Scrum 4
radiocat
2
3.4k
関西的なノリで変化の波をノリこなすチームの取り組み / 3 Steps and Kansai-soul to Riding the Waves of Change
radiocat
2
3k
スクラムちゃうがなと言われてもやってみぃひん? / Challenge to Scrum 3
radiocat
4
9.2k
Re:ゼロから始めるアジャイル開発 / restart agile
radiocat
3
1.6k
スクラム開発について / What is Scrum?
radiocat
0
510
Other Decks in Technology
See All in Technology
ロールが細分化された組織でSREは何をするか?
tgidgd
1
420
振り返りTransit Gateway ~VPCをいい感じでつなげるために~
masakiokuda
3
210
「Chatwork」のEKS環境を支えるhelmfileを使用したマニフェスト管理術
hanayo04
1
400
サービスを止めるな! DDoS攻撃へのスマートな備えと最前線の事例
coconala_engineer
1
180
Deep Security Conference 2025:生成AI時代のセキュリティ監視 /dsc2025-genai-secmon
mizutani
4
2.9k
Microsoft Defender XDRで疲弊しないためのインシデント対応
sophiakunii
1
310
AI エージェントと考え直すデータ基盤
na0
20
7.9k
全部AI、全員Cursor、ドキュメント駆動開発 〜DevinやGeminiも添えて〜
rinchsan
10
5.1k
[SRE NEXT 2025] すみずみまで暖かく照らすあなたの太陽でありたい
carnappopper
2
470
CDKコード品質UP!ナイスな自作コンストラクタを作るための便利インターフェース
harukasakihara
2
230
公開初日に Gemini CLI を試した話や FFmpeg と組み合わせてみた話など / Gemini CLI 初学者勉強会(#AI道場)
you
PRO
0
1.3k
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
0
110
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
It's Worth the Effort
3n
185
28k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Writing Fast Ruby
sferik
628
62k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Designing Experiences People Love
moore
142
24k
Rails Girls Zürich Keynote
gr2m
95
14k
A Modern Web Designer's Workflow
chriscoyier
695
190k
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