SlideShare a Scribd company logo
cl-online-learningの紹介
Satoshi Imai / 今井 悟士
Twitter: @masatoi0 Github: masatoi
これは何か
● cl-online-learning
●
書籍「オンライン機械学習」に出てくる線形
識別器のアルゴリズムからいくつか実装
● 2値分類と多値分類ができる
● githubにあります
– https://github.com/masatoi/cl-online-learning.git
インストール
●
シェルから
● Lisp処理系から
– SBCL、CCL、ECL、CLISPで動作確認済み
(ql:quickload :cl­online­learning)
 $ cd ~/quicklisp/local­projects/
 $ git clone https://github.com/masatoi/cl­online­learning.git
オンライン学習
●
バッチ学習: 訓練データをまとめて学習する
●
オンライン学習: 訓練データを逐次的に学習する
– とにかく速い: 収束が速い、データ数に対して線形時間、省メモリ
– リアルタイム処理に組込める
– 実装が簡単
– 偏りのあるデータ、ノイズのあるデータに弱い
→ 対策されたアルゴリズムが出てきた (AROW, SCW)
線形識別器
●
線形分離可能なデータに対して有効な二値分類器
● 識別関数f(x)が正か負かでクラスを分ける(xは入力データ点)
● 上手く分けられるようにパラメータ(wとb)を調整する
決定境界 f(x)=0
線形分離可能 線形分離不可能
非線形SVM(バッチ学習)
●
線形分離不可能なデータを高次元の特徴空間に射影して線形分離し
ている様子
– https://www.youtube.com/watch?v=3liCbRZPrZA
● 計算量はO(mn^2) (m: データの次元数、 n: データ数)
– データ数が増えてくると無理
– オンライン線形分類器だとO(mn)
● Common Lisp Machine Learningからフォーク
– clml-svm (github.com/masatoi/clml-svm)
cl-online-learningで実装している
二値分類アルゴリズム
●
二値分類
– パーセプトロン
– 平均化パーセプトロン
– 線形SVM
– AROW
– SCW-I、SCW-II
精度
良い
悪い
メタパラメータの数
なし
なし
2
1
2
パーセプトロン
● 学習データ: 入力x と 教師信号y の組
● パーセプトロン: 以下のルールでwを更新する
●
直近の学習データの影響を受けすぎる
→ 過去の w の更新差分を平均化 (平均化パーセプトロン)
の正負と y を比べてみて、分類に失敗していれば
w ← w + y x
AROW
● パラメータ w が、正規分布からサンプリングされたものと考える
– その正規分布の平均 μ と分散 Σ を更新する
●
精度良い、収束速い、学習も安定している ← おすすめ!
● メタパラメータとして正則化パラメータ γ を持つ
AROWは頑健
●
マージン最大化
– 決定境界から一番近いデータとの距離(マージン)を大きくとる
●
特徴量ごとに信頼度をつける
– 頻繁に出てきた特徴量の更新量は減らしていく
cl-online-learningで実装している
マルチクラス分類アルゴリズム
●
複数個の二値分類器を組み合わせてマルチクラス分類できる
●
マルチクラス分類
– 1対多 (one-vs-rest)
– 1対1 (one-vs-one)
– 誤り訂正出力符号(ECOC)
↑(予定)
必要な二値分類器の数
K個
K(K-1)/2個
K個とK(K-1)/2個の間
one-vs-rest
● クラスの数だけ二値分類器を用意: K個
●
学習時: 観測されたデータのクラスに対応する学習器では正例、そうで
なければ負例として学習
●
予測時: 全部の学習器で識別関数 を計算して最大の
ものに対応するクラスを出力する
1
2
3
各クラスに対応する
学習器
クラス2と
ラベルのついた
データ
教師信号を -1 として学習
教師信号を +1 として学習
教師信号を -1 として学習
one-vs-one
● 2つのクラスの組合せの数だけ二値分類器を用意: K(K­1) / 2 個
●
学習時: 観測されたクラスのノードに接続する学習器を学習
●
予測時: 全部の学習器で分類。多数決して一番多かったクラスを出力
1
5 2
4 3
エッジが学習器に対応
1
5 2
4 3
クラス2が観測されたとき
+1
-1
+1
-1
+1-1
+1
-1
ノードの数字が若い方を+1とした
使い方(二値分類)
●
学習器をつくる
●
データを1個用意 (double-float型のsimple-array)
●
更新する
●
予測する
(defparameter input 
  (make­array 3 :element­type 'double­float
                :initial­contents '(1d0 2d0 3d0)))
(defparameter plearner (make­perceptron 3))
(update plearner input 1d0)
(predict plearner input)
⇒1.0d0
教師信号
入力次元数
使い方(マルチクラス分類)
●
学習器をつくる
●
データを1個用意 (double-float型のsimple-array)
●
更新する
●
予測する
(defparameter input 
  (make­array 3 :element­type 'double­float
                :initial­contents '(1d0 2d0 3d0)))
(defparameter mlearner (make­one­vs­one 4 3 'arow 1d0))
(update mlearner input 2)
(predict mlearner input)
⇒1.0d0
教師信号(整数)
入力次元数 クラス数
学習器の型
学習器のメタパラメータ
データセットの学習
●
データセット: 教師信号と入力ベクトルのドット対のリスト
– Libsvmのサイトで公開されているデータセットを読み込む
●
訓練データをまとめて訓練する
●
テストデータをまとめて予測する
(defparameter a9a­dim 123)
(defparameter a9a­train (read­libsvm­data "/path/to/a9a" a9a­dim))
(defparameter a9a­test (read­libsvm­data "/path/to/a9a.t" a9a­dim))
(train plearner a9a­train)
(test plearner a9a­test)
; Accuracy: 79.988945%, Correct: 13023, Total: 16281
使用上の注意
●
スケーリング大事
– 入力の各次元が [-1, 1] の範囲に入るようにする
●
データの順序大事
– 同じクラスのデータが延々と続くような場合は性能悪化
●
必要なら順序をシャッフルする
iris
● 入力データ: アヤメの花びらとがくの大きさ (4次元)
● クラス数3、データ数150
番外:深層学習
●
特徴選択をどうするかは職人芸
→ 深層学習
●
ニューラルネットはオンライン学習できるが、更新ごとの計算量が大きい
– ミニバッチをつくってまとめて計算
● GPU向きの計算(大きな行列×行列の計算)
● cl-cudaベースの深層学習ライブラリ
– github.com/melisgl/mgl
今後の課題
●
疎ベクトルの演算を実装
● 誤り訂正出力符号(ECOC)にもとづくマルチクラス分類を実装
● cl-online-learningから流用してclml-svmもマルチクラス分類できるよ
うにする

More Related Content

PDF
Lispmeetup #45 Common Lispで音声合成
PDF
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
PDF
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
PDF
High performance python computing for data science
PDF
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
PPTX
Real world lisp
PDF
numpyの魅力
PDF
Introduction to Chainer and CuPy
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
High performance python computing for data science
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
Real world lisp
numpyの魅力
Introduction to Chainer and CuPy

What's hot (20)

PDF
PythonistaがOCamlを実用する方法
PDF
TensorFlow XLA とハードウェア
PDF
二階堂愛と二階堂藍の違いについて
PDF
深層学習フレームワーク Chainerとその進化
PDF
PyCharm入門
PPTX
C++のビルド高速化について
PPTX
My code
ODP
PDF
Rubyで実はwritev(2) が使われているはなし
PPTX
クリスマス?
PDF
[DL Hacks]tensorflow/privacy Task-Embedded Control Networks for Few-Shot Imit...
PDF
Tcl/Tkクイック入門
PDF
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
PDF
時を超えた JavaScript の道
PDF
2012 12 08_ngk_osm_a
PDF
論文紹介 "DARTS: Differentiable Architecture Search"
PDF
Numpy scipy matplotlibの紹介
PDF
CMSI計算科学技術特論A(9) 高速化チューニングとその関連技術2
PDF
Autopilot google kubernetes engineでargo workflowsを動かす
KEY
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PythonistaがOCamlを実用する方法
TensorFlow XLA とハードウェア
二階堂愛と二階堂藍の違いについて
深層学習フレームワーク Chainerとその進化
PyCharm入門
C++のビルド高速化について
My code
Rubyで実はwritev(2) が使われているはなし
クリスマス?
[DL Hacks]tensorflow/privacy Task-Embedded Control Networks for Few-Shot Imit...
Tcl/Tkクイック入門
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
時を超えた JavaScript の道
2012 12 08_ngk_osm_a
論文紹介 "DARTS: Differentiable Architecture Search"
Numpy scipy matplotlibの紹介
CMSI計算科学技術特論A(9) 高速化チューニングとその関連技術2
Autopilot google kubernetes engineでargo workflowsを動かす
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Ad

Similar to Lisp meetup #29 cl-online-learningの紹介 (20)

PDF
Metahub for github
PDF
Kubeflowで何ができて何ができないのか #DEvFest18
PDF
Pythonによる並列プログラミング -GPGPUも-
PDF
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
PDF
あなたの安心を高速に守る Container-based CI
PDF
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
PPTX
ロボットシステム学2015年第9回
PDF
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
PPTX
ファイルシステムのスナップショット機能でバックアップを取得する
PDF
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
PDF
ML system design_pattern
PDF
kompass_GreacとLLM_20230728.pdf
PPTX
俺とGitHub
PDF
再考: お買い得物件を機械学習で見つける方法
PDF
Re: 運用に自動化を求めるのは間違っているだろうか
PPTX
Git & GitHub & kintone でウルトラハッピー!
PDF
Open whisk slackinvite - public
PDF
Cloud automator的なものを実装してみる
PDF
私とOSSの25年
PDF
Reco choku tech night #09 -reinvent2018報告会-
Metahub for github
Kubeflowで何ができて何ができないのか #DEvFest18
Pythonによる並列プログラミング -GPGPUも-
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
あなたの安心を高速に守る Container-based CI
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
ロボットシステム学2015年第9回
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
ファイルシステムのスナップショット機能でバックアップを取得する
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
ML system design_pattern
kompass_GreacとLLM_20230728.pdf
俺とGitHub
再考: お買い得物件を機械学習で見つける方法
Re: 運用に自動化を求めるのは間違っているだろうか
Git & GitHub & kintone でウルトラハッピー!
Open whisk slackinvite - public
Cloud automator的なものを実装してみる
私とOSSの25年
Reco choku tech night #09 -reinvent2018報告会-
Ad

More from Satoshi imai (7)

PDF
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
PDF
lispmeetup#63 Common Lispでゼロから作るDeep Learning
PDF
Portacle : Common Lispのオールインワン開発環境
PDF
Lispmeetup #56 Common lispによるwebスクレイピング技法
PDF
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
PDF
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
PDF
Lispmeetup48 cl-online-learningによる文書分類
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Portacle : Common Lispのオールインワン開発環境
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup48 cl-online-learningによる文書分類

Lisp meetup #29 cl-online-learningの紹介