Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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