ラベル 研究 の投稿を表示しています。 すべての投稿を表示
ラベル 研究 の投稿を表示しています。 すべての投稿を表示

2016年11月18日金曜日

機械学習に関連する学会のクラスタリング

機械学習周辺の学会/論文誌が多くて関連性がよくわからなかったので,引用関係をもとに可視化してみました.マウス操作で拡大/スクロールしたり,マウスオーバーで関連エッジが強調表示されたりします.


全画面表示 / ソース

元データには Aminer が公開している Citation Network Dataset を使っています[1].
[1] Jie Tang, Jing Zhang, Limin Yao, Juanzi Li, Li Zhang, and Zhong Su.
  ArnetMiner: Extraction and Mining of Academic Social Networks.
  In Proceedings of SIGKDD'2008. pp.990-998.

ノードが各論文誌/講演会に対応しており,各ノードのサイズは被引用数を示しています.より具体的には,50件以上の引用/被引用の関係があるノード間にエッジを生成し,引用数に応じた引力と斥力に基づいた運動をシミュレーションすることで,クラスタを形成させています.

ICML(緑色のノード)などのいわゆる機械学習の学会は(近年のブームのせいか)同種内の引力よりも周辺分野からの引力が強いようで,面積が大きい緩いクラスタを形成しているようです.

機械学習の周辺ではコンピュータビジョン,言語処理,ニューラルネット,人工知能などが目立つクラスタを形成しており,データマイニングは機械学習と同様,面積が大きい緩いクラスタを形成しています.

自分の専門が制御理論なので,制御分野の論文誌である Automatica(赤色のノード) と機械学習のトップカンファレンスである ICML (緑色のノード)の近傍にある学会を抽出して可視化してみましたが,大本のデータが DBLP で,制御理論の分野の引用関係があまり収録されていないので,制御分野については寂しい感じになっています.
信号処理とロボットが制御分野の近くでクラスタを形成しており,これらとコンピュータビジョン・ニューラルネットが機械学習との間に位置しています.また,最適化や応用数学のクラスタが制御の近くにあるのもわりと納得です.

前述したデータセットの処理には python および NetworkX, ノードの配置に Gephi,可視化には D3.js を利用しています.これらの有用なソフトウェアを開発・公開されている方々に感謝します.

あと,超重いですがコンピュータ関連分野全体を可視化したものも置いておきます.
https://maruta.github.io/visnet-dml/full/

2013年8月17日土曜日

Android タブレットで倒立振子

突然ですが,諸般の事情で Android タブレット(Nexus 7)を制御器としたセグウェイっぽい自走式倒立振子を作りました.忘れないうちに製作の要点をメモしておきます.後日気が向いたときに詳細な記事を書くかもしれません.
Android タブレットは内蔵するジャイロセンサで角速度を計測し,モータに印加する制御入力の計算を行います.腕のように見えるのはレゴブロックで作られたバンパーで転倒時と机からの落下時に液晶画面を守ります.

IOIO-OTG と HUB-ee Wheel による製作容易なハードウェア

ハードウェア的に特に重要な部品は IOIO-OTG と HUB-ee Wheel です.


上の写真が IOIO-OTG で,これを介して Android からモータを駆動することができます. いわゆる ADK と似たような機能を持ちますが小型であることをはじめとして,様々な面で扱いやすいと思います.


上の写真は HUB-ee Wheel で,一見タイヤに見えますが中にモータ・モータドライバ・エンコーダを内蔵している便利部品です.エンコーダがかなり粗く(4逓倍で128カウント/回転)カウンタを内蔵していない点が少し残念ですが,レゴブロックと簡単に結合でき,ハードウェアの製作を飛躍的に簡単にしてくれます.

また,今回は適当な Nexus 7 専用ケースに両面テープで電池などの部品とレゴブロック2本を接着し,あとはレゴブロックを嵌め合わせることで HUB-ee Wheels を固定し,バンパーなどを構築しています.


制御器の連続時間実装

ソフトウェア,つまり制御理論の面でやや特殊なのは制御器の連続時間実装を行っている点です.というのも,Android は非リアルタイムOSで一定周期でのジャイロセンサによる計測や制御入力の更新が困難だからです.実際 IOIOLib Application Framework で何も考えずに制御ループを回したときの実行間隔は以下のようになります.


概ね 5 ms 程度の間隔でループが回っているものの 20 ms 以上の間隔になることもしばしばあり,離散時間システムとしての実装には多少無理があることがわかります.

倒立振子のモデリングと制御器の設計は特に特殊なところはありません.

今後の課題

現状では IOIO-OTG がエンコーダのカウントをサポートしておらず,Androidのソフトウェアによる計数を行っているので,高速に移動したり制御周期が長くなったりするとエンコーダの取りこぼしが発生してしまいます.

本来なら Android 端末を使った自走式倒立振子のメリットとして,カメラやネットワークを簡単に利用できることが挙げられるべきですが,この問題のために制御周期への影響が大きいと考えられるこれらの機能が使いにくいのが残念なところです.

本格的に遊ぶためにはエンコーダ用のカウンタ回路を IOIO-OTG の外部に設けるべきであると考えられます.


2013年1月29日火曜日

Sublime Text 2 で LaTeX on Windows

2013/4/14 コメントでいただいた情報を追記


Sublime Text 2 とは?

Sublime Text 2 は最近巷で流行っている主にプログラムを書くためのエディターです.
僕はここ10年の殆どの期間 TeX 文書の編集に Emacs を利用しており,年に一度くらいの頻度で他のエディタを試しては Emacs に帰ってくるというのを繰り返していたのですが.Sublime Text 2 は大変使い心地が良く,今後も使い続けようと思うので TeX 編集環境の設定も含むインストール手順,その他もろもろをメモしておきます.

2009年1月15日木曜日

三叉ヘビ型ロボットの製作

三叉ヘビ型ロボットというおもしろい構造のロボットが
杉江研の石川先生たちによって研究されています。
僕は研究に深く関わっているわけではありませんが、とてもいい動きをするロボットなので一度作ってみたいと思っていました。研究室には一応理論を検証するための機械がありますが、データを取ったり精度を確保するためにそれなりに大がかりな装置になっています。

今回は、より単純に三叉の動きを楽しむために、小型で小回りの良いロボットを製作してみました。
以下製作記録です。
デモ用のプログラムを書き込んで動作

いつもより多めにまわってます。
学部生の勧誘で本部に出張する時とかに役立てる予定。

2008年9月21日日曜日

MATLAB用PSOクラス

(English version is HERE.)
MATLABの2008aからオブジェクトの新しい書き方が導入されました.
あんまりオブジェクト指向なプログラミングの経験はないのですが,新しい書き方はだいぶ簡単で使いやすいと思います.

というわけで,とりあえず PSO のルーチンを2008a仕様に書き換えてみました.

pso.m -- PSOクラス
psotest.m --- pso.mの使用例,ベンチマーク問題を解きます.
psotest2.m --- pso.mの使用例,簡単な制約付き最適化問題を解きます.

使い方はpsotest2.mを見ればだいたいわかるはず‥

PSOによる固定構造補償器設計

韓国のIFACではPSO(Particle Swarm Optimization)という最適化アルゴリズムを使った固定構造補償器設計について発表してきました.

発表のメインは,制御系設計で必要となる拘束条件(閉ループの安定性とか)を簡単に扱う方法の提案で,これによってPSOのお手軽さを損なわずに制御系設計をすることが出来ます.

PID制御器のチューニングみたいな,設計変数が少なくて,それでいてパラメータの増減と性能との因果関係がそこそこ強い問題に関しては,PSOは強くてお手軽です.

あまりにもお手軽なので,解析解があるような場合にもPSOで設計しちゃっていいんじゃないかと思うほどです.
理論を研究する立場としては,おもしろくないことこの上ないですが(笑).

しかし,前提となっているのはしっかりしたプラントのモデルで,実用上はこっちの方がネックになるでしょうから,次は連続時間のシステム同定と制御系設計を同時に行えるような理論の構築を目指したいなーとか思っています.
Campi先生のVRFTとかはすごく良いと思うのだけど,やっぱり離散時間システムのいやらしさというか,サンプリング間隔を短く取ることが必ずしも結果に寄与しないというのが単に腹が立つだけでなく,実用上も問題だと思うので.

一応,興味を持たれた方のために発表の参照情報を置いておきます.
Automaticaに投稿した段階では,制約条件の扱いをALPSOという方法で行っていましたが,これは複雑な上に性能が優れているわけではないので,IFACで提案した方法の方が優れていると思います.
I. Maruta, T.H. Kim, T. Sugie:
Synthesis of fixed-structure H-infinity controllers via Constrained Particle Swarm Optimization,
Proceedings of the 17th IFAC World Congress, Seoul, Korea, pp. 7843-7848  (2008. 7)
発表スライド(PDF)
ちなみに発表ではH∞ノルムに基づいた設計仕様を扱っていますが,応答とかに関する仕様を与えても,十分実用的に動くはずです.
そういう場合だと解析解が存在するケースや,もっと効率的な方法がある場合も少なくないでしょうが,PSOよりお手軽な方法はそうないでしょうから,PSOで失敗してから検討してみても良いと思います(笑)

PSOの実装については(自分でやっても大した手間ではないのですが‥)後日また書く予定です.