Dogfooding

80
Dogfooding 女子

description

at OSC2014 Kansai@Kyoto

Transcript of Dogfooding

Page 1: Dogfooding

Dogfooding💕 女子💕

Page 2: Dogfooding

自己紹介

• @stibear1996

• 普通の高校生Lisper

• NPCA平部員

• ヒゲの生えた💕 女子💕

Page 3: Dogfooding

Dogfoodingとは

• “Eating your own dog food”

• 開発途上のソフトウェアを自分で使うこと

Page 4: Dogfooding

序章 とあるミーハープログラマの事例

※私ではない

Page 5: Dogfooding

( ˘⊖˘) .oO(機械学習流行ってる…)

Page 6: Dogfooding

いまどき流行りの機械学習

Page 7: Dogfooding

( ˘⊖˘) .oO(私もやりたい…)

Page 8: Dogfooding

( ˘⊖˘) .oO(どうやってやるんだ?)

Page 9: Dogfooding

Python/Javaで機械学習

Page 10: Dogfooding

( ˘⊖˘) .oO(ライブラリあるじゃん…)

Page 11: Dogfooding

( ˘⊖˘) .oO(既存のライブラリ使お…)

Page 12: Dogfooding

………

Page 13: Dogfooding

甘い!甘すぎる!!

Page 14: Dogfooding

💕 女子💕は

Page 15: Dogfooding

💕 女子💕は自分で実装!!

Page 16: Dogfooding

( ˘⊖˘) .oO(実装…?Pythonで作ろ…)

Page 17: Dogfooding

甘い!甘すぎる!!

Page 18: Dogfooding

💕 女子💕は

Page 19: Dogfooding

💕 女子💕はLISPで実装!!

Page 20: Dogfooding

( ˘⊖˘) .oO(Lisp…?Clojure使お…)

Page 21: Dogfooding

甘い!甘すぎる!!

Page 22: Dogfooding

💕 女子💕は

Page 23: Dogfooding

💕 女子💕は言語から実装!!

Page 24: Dogfooding

………

Page 25: Dogfooding

というわけで,Picrinでニューラルネットを

実装しました

Page 26: Dogfooding

Picrinとは

• @wasabizによるScheme処理系

• R7RS準拠を目指す新進気鋭の処理系

• 絶賛Pull-req募集中

• 私もCo-Authorの1人

• フルセットの健全マクロや,モナディックリストオペレータ,第一級ライブラリなど,挑戦的な試みも多い

• 今後とも目が離せないOSSプロジェクト

Page 27: Dogfooding

Picrinの健全マクロ

syntactic-closure

(define-syntax aif

(sc-macro-transformer

(lambda (form env)

(let ((test

(make-syntactic-closure

env ‘() (cadr form)))

(then

(make-syntactic-closure

env ‘(it) (caddr form)))

(else

(make-syntactic-closure

env ‘() (cadddr form))))

`(let ((it ,test))

(if it ,then ,else))))))

implicit renaming

(define-syntax aif

(ir-macro-transformer

(lambda (form inject compare)

(let ((it (inject ‘it))

(test (cadr form))

(then (caddr form))

(else (cadddr form)))

`(let ((,it ,test))

(if ,it ,then ,else))))))

Page 28: Dogfooding

PicrinのMonadic List Operator

Haskell

filter pred xs =

do x <- xs

if pred x then

return x

else

mzero

Picrin (Scheme)

(define (filter pred xs)

(for (let ((x (in xs)))

(if (pred x)

(yield x)

(null)))))

Page 29: Dogfooding

このPicrinを使ってまずは単純パーセプトロンを

実装してみました

Page 30: Dogfooding

第Ⅰ章 ベクタ操作が欲しくて…夏

Page 31: Dogfooding

第Ⅰ章 ベクタ操作が欲しくて…夏実装

Page 32: Dogfooding

( ˘⊖˘) .oO(ベクタ関数ないじゃん…)

Page 33: Dogfooding

( ˘⊖˘) .oO(実装しちゃお…)

Page 34: Dogfooding

まず,Picrinでベクタを扱うために

SRFI-43を実装します

Page 35: Dogfooding

SRFI

• 「さーふぃー」と読む

• Scheme Requests for Implementation

• 「Scheme の事実上の標準拡張仕様のこと」

(Wikipedia)

• 小さなSchemeの仕様では補いきれない部分をSRFIで標準化

Page 36: Dogfooding

SRFI-43

• ベクタに関する諸々の手続き(関数)が定義されている

• リストに関する諸々の手続きが定義されているSRFI-1との対応を若干意識している

• そのためvector-foldなんてものもある

• なお,SRFI-43の実装のためSRFI-8を実装し使用

Page 37: Dogfooding

SRFI-8の実装

Page 38: Dogfooding

SRFI-43の実装

Page 39: Dogfooding

SRFI-8 & 43の実装

Page 40: Dogfooding

これで,ベクタ同士のドット積等々が実装できるようになりました

やったね たえちゃん!

Page 41: Dogfooding

( ˘⊖˘) .oO(いよいよか…)

Page 42: Dogfooding

………

Page 43: Dogfooding

第Ⅱ章 単純パーセプトロンちゃん

Page 44: Dogfooding

( ˘⊖˘) .oO(何実装しようかな…)

Page 45: Dogfooding

単純パーセプトロンちゃん(……きこえますか…今…あなたの心に…直接…呼びかけています…実装するのなら…私が比較的…簡単です…さあ…私を

実装するのです…)

Page 46: Dogfooding

( ˘⊖˘) .oO(単純パーセプトロンか…)

Page 47: Dogfooding

さあ,単純パーセプトロンの定義を

見てみましょう

Page 48: Dogfooding

単純パーセプトロン

パターン認識と機械学習 上 (p.p.190)

Page 49: Dogfooding

ただし,今回は簡単のために,

Φは無視し,次の定義を用います

※yにΦ(x)をあたえればいいので

Page 50: Dogfooding

単純パーセプトロン

Page 51: Dogfooding

実装

Page 52: Dogfooding

dot*

Page 53: Dogfooding

predict

Page 54: Dogfooding

train

Page 55: Dogfooding

( ˘⊖˘) .oO(できたぜ…)

Page 56: Dogfooding

………

Page 57: Dogfooding

第Ⅲ章 ANDとOR

Page 58: Dogfooding

( ˘⊖˘) .oO(早速動かしてみたい…)

Page 59: Dogfooding

( ˘⊖˘) .oO(論理演算とかやるか…)

Page 60: Dogfooding

AND/OR

Page 61: Dogfooding

テストデータ

Page 62: Dogfooding

percep関数

Page 63: Dogfooding

動かしてみる

Page 64: Dogfooding

動かしてみる

Page 65: Dogfooding

動かしてみる

Page 66: Dogfooding

( ˘⊖˘) .oO(ヨッシャ!!…)

Page 67: Dogfooding

………

Page 68: Dogfooding

第Ⅳ章 非線形分離関数なアイツ

Page 69: Dogfooding

Minsky&Papert「単純パーセプトロンは線形非分離

な問題を解けないよ」

Page 70: Dogfooding

AND/OR

Page 71: Dogfooding

XOR

Page 72: Dogfooding

XOR「フハハ!! 俺は線形分離できぬぞ!!」

Page 73: Dogfooding

単純パーセプトロンちゃん「ふぇぇ…」

Page 74: Dogfooding

( ˘⊖˘) .oO(なるほど…)

Page 75: Dogfooding

(多層パーセプトロンの実装は,オブジェクト指向プログラミングが

便利だろうということで,)

Page 76: Dogfooding

(現在Picrinで動くCLOSライクなオブジェクトシステムを開発中)

Page 77: Dogfooding

To be continued…

Page 78: Dogfooding

まとめ

• みなさんPicrinを使いましょう!

Page 79: Dogfooding

参考文献

• パターン認識と機械学習(上)

• 単純パーセプトロンをPythonで組んでみる– http://tjo.hatenablog.com/entry/2013/05/01/190247

Page 80: Dogfooding

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