Slide 1

Slide 1 text

Julia で機械学習 ダニエル(@daniel_program) 1 1

Slide 2

Slide 2 text

⾃⼰紹介 ニックネーム: ダニエル 所属: 農⼯⼤ 知能情報システム⼯学科 好きなプログラミング⾔語: Julia , Rust 2 2

Slide 3

Slide 3 text

みなさん Julia はご存知ですか? 3 3

Slide 4

Slide 4 text

Julia とは println("Hello World!") 科学計算が得意 書きやすい 速い(JIT) ※ 4 4

Slide 5

Slide 5 text

書きやすい⼀例 ⾏列計算は簡単に使える julia> A = [1 2 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> A * A 2×2 Array{Int64,2}: 7 10 15 22 julia> A .* A 2×2 Array{Int64,2}: 1 4 9 16 5 5

Slide 6

Slide 6 text

プロット julia> using Plots julia> x = 0:0.1:10 0.0:0.1:10.0 julia> y = sin.(x) # . は全てに適⽤ 101-element Array{Float64,1}: 0.0 0.09983341664682815 ⋮ -0.3664791292519284 -0.5440211108893698 julia> plot(x,y) 6 6

Slide 7

Slide 7 text

速い C Julia LuaJIT Rust Go Fortran Java JavaScript Matlab Mathematica Python R Octave iteration_pi_sum matrix_multiply matrix_statistics parse_integers print_to_file recursion_fibonacci recursion_quicksort userfunc_mandelbrot benchmark benchmark 100 101 102 103 104 Julia Micro-Benchmarks 7 7

Slide 8

Slide 8 text

Julia での機械学習はここが良い 簡単に記述できる(Pytorch ⾵) ⾃動微分が⾼性能 よりインタラクティブに分析できる 8 8

Slide 9

Slide 9 text

9 9

Slide 10

Slide 10 text

簡単に記述できる モデルの作り⽅ julia> using Flux julia> model = Chain( Dense(784, 128, relu), Dense(128, 10), logsoftmax, ) Chain(Dense(784, 128, relu), Dense(128, 10), logsoftmax) 10 10

Slide 11

Slide 11 text

モデルの使い⽅ julia> model(rand(784,5)) # ランダムなデータを5 つ⼊⼒ 10×5 Array{Float32,2}: -2.0062 -3.1991 -3.16117 -3.63618 -2.62927 -3.19613 -2.61039 -2.42026 -2.23364 -2.3462 -2.49663 -1.99805 -2.24729 -2.23044 -2.43747 -3.3243 -2.53268 -2.64656 -2.75284 -2.51889 ⋮ -2.40612 -2.15469 -2.11569 -2.35603 -2.74064 -2.17706 -2.36897 -2.75496 -2.08347 -2.19851 -3.70686 -3.23972 -3.1855 -3.24699 -2.74348 学習については Pytorch と似たような記述⽅法になってい ます。 11 11

Slide 12

Slide 12 text

⾃動微分 julia> f(x) = 2x + 1 # 関数定義 f (generic function with 1 method) julia> f(2) 5 julia> f'(2) # f(x) を微分して2 を代⼊して計算, f'(x) = 2 2 julia> @code_llvm f'(2) # LLVM の表現を⾒る define i64 @"julia_#43_13375"(i64) { top: ret i64 2 } 多変数関数のためにはより汎⽤な gradient 関数が⽤意さ れています。 12 12

Slide 13

Slide 13 text

⾃分の活性化関数を定義 julia> Chain( Dense(784, 128), x -> max.(0, x), # ReLU を定義しています Dense(128, 10), logsoftmax ) julia> model(rand(784,2)) 10×2 Array{Float32,2}: -2.36733 -3.14914 -1.59384 -2.54492 ⋮ 13 13

Slide 14

Slide 14 text

⾃分のレイヤーを定義 struct MyDense # レイヤーの構造体定義 W # 重み B # バイアス end # ⼊出⼒の個数から初期化できるようにする MyDense(input::Integer, output::Integer) = MyDense(randn(output, input), randn(output)) # レイヤーの動作の定義 (m::MyDense)(x) = m.W * x .+ m.B Flux.@functor MyDense # パラメータを学習可能にする これだけの定義で Flux のモデルに組み込めます。 14 14

Slide 15

Slide 15 text

インタラクティブ 15 15

Slide 16

Slide 16 text

便利なライブラリ 汎⽤ライブラリ Plots.jl: グラフの描写 PyCall.jl: Python の読み込み DataFrames.jl: Pandas のようにデータを格納できる CUDA.jl: GPU を使える 機械学習⽤ライブラリ Zygote: ⾃動微分が実装されている Metalhead: VGG 等のモデル DifferentialEquations.jl: 微分⽅程式を解ける model zoo: Flux で実装されたモデルいろいろ 16 16

Slide 17

Slide 17 text

ご清聴ありがとうございました 17 17