Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dogfooding
💕 女子💕
自己紹介
• @stibear1996
• 普通の高校生Lisper
• NPCA平部員
• ヒゲの生えた💕 女子💕
Dogfoodingとは
• “Eating your own dog food”
• 開発途上のソフトウェアを自分で使うこと
序章 とあるミーハープログラマの事例
※私ではない
( ˘⊖˘) .oO(機械学習流行ってる…)
いまどき流行りの機械学習
( ˘⊖˘) .oO(私もやりたい…)
( ˘⊖˘) .oO(どうやってやるんだ?)
Python/Javaで機械学習
( ˘⊖˘) .oO(ライブラリあるじゃん…)
( ˘⊖˘) .oO(既存のライブラリ使お…)
………
甘い!甘すぎる!!
💕 女子💕は
💕 女子💕は
自分で実装!!
( ˘⊖˘) .oO(実装…?Pythonで作ろ…)
甘い!甘すぎる!!
💕 女子💕は
💕 女子💕は
LISPで実装!!
( ˘⊖˘) .oO(Lisp…?Clojure使お…)
甘い!甘すぎる!!
💕 女子💕は
💕 女子💕は
言語から実装!!
………
というわけで,
Picrinでニューラルネットを
実装しました
Picrinとは
• @wasabizによるScheme処理系
• R7RS準拠を目指す新進気鋭の処理系
• 絶賛Pull-req募集中
• 私もCo-Authorの1人
• フルセットの健全マクロや,
モナディックリストオペレータ,
第一級ラ...
Picrinの健全マクロ
syntactic-closure
(define-syntax aif
(sc-macro-transformer
(lambda (form env)
(let ((test
(make-syntactic-clo...
PicrinのMonadic List Operator
Haskell
filter pred xs =
do x <- xs
if pred x then
return x
else
mzero
Picrin (Scheme)
(defin...
このPicrinを使って
まずは単純パーセプトロンを
実装してみました
第Ⅰ章 ベクタ操作が欲しくて…夏
第Ⅰ章 ベクタ操作が欲しくて…夏
実装
( ˘⊖˘) .oO(ベクタ関数ないじゃん…)
( ˘⊖˘) .oO(実装しちゃお…)
まず,
Picrinでベクタを扱うために
SRFI-43を実装します
SRFI
• 「さーふぃー」と読む
• Scheme Requests for Implementation
• 「Scheme の事実上の標準拡張仕様のこと」
(Wikipedia)
• 小さなSchemeの仕様では補いきれない部分
をSRF...
SRFI-43
• ベクタに関する諸々の手続き(関数)が定義
されている
• リストに関する諸々の手続きが定義されて
いるSRFI-1との対応を若干意識している
• そのためvector-foldなんてものもある
• なお,SRFI-43の実装...
SRFI-8の実装
SRFI-43の実装
SRFI-8 & 43の実装
これで,
ベクタ同士のドット積等々が
実装できるようになりました
やったね たえちゃん!
( ˘⊖˘) .oO(いよいよか…)
………
第Ⅱ章 単純パーセプトロンちゃん
( ˘⊖˘) .oO(何実装しようかな…)
単純パーセプトロンちゃん
(……きこえますか…今…あなたの心に…
直接…呼びかけています…実装するのな
ら…私が比較的…簡単です…さあ…私を
実装するのです…)
( ˘⊖˘) .oO(単純パーセプトロンか…)
さあ,
単純パーセプトロンの定義を
見てみましょう
単純パーセプトロン
パターン認識と機械学習 上 (p.p.190)
ただし,
今回は簡単のために,
Φは無視し,次の定義を用います
※yにΦ(x)をあたえればいいので
単純パーセプトロン
実装
dot*
predict
train
( ˘⊖˘) .oO(できたぜ…)
………
第Ⅲ章 ANDとOR
( ˘⊖˘) .oO(早速動かしてみたい…)
( ˘⊖˘) .oO(論理演算とかやるか…)
AND/OR
テストデータ
percep関数
動かしてみる
動かしてみる
動かしてみる
( ˘⊖˘) .oO(ヨッシャ!!…)
………
第Ⅳ章 非線形分離関数なアイツ
Minsky&Papert
「単純パーセプトロンは線形非分離
な問題を解けないよ」
AND/OR
XOR
XOR「フハハ!! 俺は線形分離でき
ぬぞ!!」
単純パーセプトロンちゃん
「ふぇぇ…」
( ˘⊖˘) .oO(なるほど…)
(多層パーセプトロンの実装は,
オブジェクト指向プログラミングが
便利だろうということで,)
(現在Picrinで動くCLOSライクな
オブジェクトシステムを開発中)
To be continued…
まとめ
• みなさんPicrinを使いましょう!
参考文献
• パターン認識と機械学習(上)
• 単純パーセプトロンをPythonで組んでみる
– http://tjo.hatenablog.com/entry/2013/05/01/190247
ご清聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

Dogfooding

742 views

Published on

at OSC2014 Kansai@Kyoto

Published in: Technology
  • Be the first to comment

Dogfooding

  1. 1. Dogfooding 💕 女子💕
  2. 2. 自己紹介 • @stibear1996 • 普通の高校生Lisper • NPCA平部員 • ヒゲの生えた💕 女子💕
  3. 3. Dogfoodingとは • “Eating your own dog food” • 開発途上のソフトウェアを自分で使うこと
  4. 4. 序章 とあるミーハープログラマの事例 ※私ではない
  5. 5. ( ˘⊖˘) .oO(機械学習流行ってる…)
  6. 6. いまどき流行りの機械学習
  7. 7. ( ˘⊖˘) .oO(私もやりたい…)
  8. 8. ( ˘⊖˘) .oO(どうやってやるんだ?)
  9. 9. Python/Javaで機械学習
  10. 10. ( ˘⊖˘) .oO(ライブラリあるじゃん…)
  11. 11. ( ˘⊖˘) .oO(既存のライブラリ使お…)
  12. 12. ………
  13. 13. 甘い!甘すぎる!!
  14. 14. 💕 女子💕は
  15. 15. 💕 女子💕は 自分で実装!!
  16. 16. ( ˘⊖˘) .oO(実装…?Pythonで作ろ…)
  17. 17. 甘い!甘すぎる!!
  18. 18. 💕 女子💕は
  19. 19. 💕 女子💕は LISPで実装!!
  20. 20. ( ˘⊖˘) .oO(Lisp…?Clojure使お…)
  21. 21. 甘い!甘すぎる!!
  22. 22. 💕 女子💕は
  23. 23. 💕 女子💕は 言語から実装!!
  24. 24. ………
  25. 25. というわけで, Picrinでニューラルネットを 実装しました
  26. 26. Picrinとは • @wasabizによるScheme処理系 • R7RS準拠を目指す新進気鋭の処理系 • 絶賛Pull-req募集中 • 私もCo-Authorの1人 • フルセットの健全マクロや, モナディックリストオペレータ, 第一級ライブラリなど,挑戦的な試みも多い • 今後とも目が離せないOSSプロジェクト
  27. 27. 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))))))
  28. 28. 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)))))
  29. 29. このPicrinを使って まずは単純パーセプトロンを 実装してみました
  30. 30. 第Ⅰ章 ベクタ操作が欲しくて…夏
  31. 31. 第Ⅰ章 ベクタ操作が欲しくて…夏 実装
  32. 32. ( ˘⊖˘) .oO(ベクタ関数ないじゃん…)
  33. 33. ( ˘⊖˘) .oO(実装しちゃお…)
  34. 34. まず, Picrinでベクタを扱うために SRFI-43を実装します
  35. 35. SRFI • 「さーふぃー」と読む • Scheme Requests for Implementation • 「Scheme の事実上の標準拡張仕様のこと」 (Wikipedia) • 小さなSchemeの仕様では補いきれない部分 をSRFIで標準化
  36. 36. SRFI-43 • ベクタに関する諸々の手続き(関数)が定義 されている • リストに関する諸々の手続きが定義されて いるSRFI-1との対応を若干意識している • そのためvector-foldなんてものもある • なお,SRFI-43の実装のためSRFI-8を実装 し使用
  37. 37. SRFI-8の実装
  38. 38. SRFI-43の実装
  39. 39. SRFI-8 & 43の実装
  40. 40. これで, ベクタ同士のドット積等々が 実装できるようになりました やったね たえちゃん!
  41. 41. ( ˘⊖˘) .oO(いよいよか…)
  42. 42. ………
  43. 43. 第Ⅱ章 単純パーセプトロンちゃん
  44. 44. ( ˘⊖˘) .oO(何実装しようかな…)
  45. 45. 単純パーセプトロンちゃん (……きこえますか…今…あなたの心に… 直接…呼びかけています…実装するのな ら…私が比較的…簡単です…さあ…私を 実装するのです…)
  46. 46. ( ˘⊖˘) .oO(単純パーセプトロンか…)
  47. 47. さあ, 単純パーセプトロンの定義を 見てみましょう
  48. 48. 単純パーセプトロン パターン認識と機械学習 上 (p.p.190)
  49. 49. ただし, 今回は簡単のために, Φは無視し,次の定義を用います ※yにΦ(x)をあたえればいいので
  50. 50. 単純パーセプトロン
  51. 51. 実装
  52. 52. dot*
  53. 53. predict
  54. 54. train
  55. 55. ( ˘⊖˘) .oO(できたぜ…)
  56. 56. ………
  57. 57. 第Ⅲ章 ANDとOR
  58. 58. ( ˘⊖˘) .oO(早速動かしてみたい…)
  59. 59. ( ˘⊖˘) .oO(論理演算とかやるか…)
  60. 60. AND/OR
  61. 61. テストデータ
  62. 62. percep関数
  63. 63. 動かしてみる
  64. 64. 動かしてみる
  65. 65. 動かしてみる
  66. 66. ( ˘⊖˘) .oO(ヨッシャ!!…)
  67. 67. ………
  68. 68. 第Ⅳ章 非線形分離関数なアイツ
  69. 69. Minsky&Papert 「単純パーセプトロンは線形非分離 な問題を解けないよ」
  70. 70. AND/OR
  71. 71. XOR
  72. 72. XOR「フハハ!! 俺は線形分離でき ぬぞ!!」
  73. 73. 単純パーセプトロンちゃん 「ふぇぇ…」
  74. 74. ( ˘⊖˘) .oO(なるほど…)
  75. 75. (多層パーセプトロンの実装は, オブジェクト指向プログラミングが 便利だろうということで,)
  76. 76. (現在Picrinで動くCLOSライクな オブジェクトシステムを開発中)
  77. 77. To be continued…
  78. 78. まとめ • みなさんPicrinを使いましょう!
  79. 79. 参考文献 • パターン認識と機械学習(上) • 単純パーセプトロンをPythonで組んでみる – http://tjo.hatenablog.com/entry/2013/05/01/190247
  80. 80. ご清聴ありがとうございました

×