タグ

ブックマーク / hillbig.cocolog-nifty.com (19)

  • C++の便利ツール・ライブラリ - DO++

    フルタイムで働きはじめて4ヶ月。 いろんなことがありました。 今日はインターンが来ているということもあり日頃のC++コーディングライフの中で大変重用しているツールを紹介します。といってもどれも有名なツールでググれば解説がでてくるとは思いますので、一言ずつだけ紹介してみます。みなさんも何かよさげなライブラリ・ツールがありましたら教えてください。 - valgrind/callgrind/cachegrind プログラムの実行結果を解析するツール群。まぁ、王道であえて紹介する必要はないかもしいませんが.。valgrindはプログラムのどこかでメモリが漏れているかどうかのチェックに使います.コードのどの部分で確保した領域がどこで漏れているかまで追跡することができます valgrind --leak-check=full command プログラムのどのが計算量的にボトルネックになっているかを調べ

    C++の便利ツール・ライブラリ - DO++
  • 博士生活振り返り - DO++

    ずっとドタバタしていたのですが、ようやく新しい生活のリズムがでてきました。 無事、情報理工学の博士号を取得して卒業し、4月からPreferred Infrastructureでフルタイムで働いています。 研究方面からのお誘いもいろいろあったのですが、会社一に専念しております。 ただ、研究活動はこれからも会社のバックアップのもとしていきます。 また、3月に結婚もしました。 年明けから博士卒業、結婚の二柱に加えてNLPチュートリアル、会社の仕事とテンパってました。 なんとか体を壊さず乗り越えられたのはみなさんの助けです。 しかし、喉元過ぎると熱さ忘れるという言葉通り、「これはもうだめだろう」と追い詰められていた時の気持ちを既に忘れつつあります。 誰かの参考になるかもしれませんので、この時の気持ちも含め博士3年過ごして感じたことや、研究の話とかを思い出せる範囲で書いてみます。 --- 私が修

    博士生活振り返り - DO++
  • PFIセミナー資料: 研究開発2009 - DO++

    昨日ありました、PFIでのセミナーでの発表資料です。 研究開発のチームの紹介の後に、2009年サーベイした論文の中で面白かった論文を 機械学習、データ構造、画像処理で紹介してます 紹介した話は - Multi-class CW (Multi-class Confidence Weighted Learning,) - AROW (Adaptive Regularization Of Weight Vector) - Online-EM algorithm - 全備簡潔木 (Fully-functional Succinct Tree) - 圧縮連想配列 (compressed function) - PatchMatch です。 #資料中の簡潔木の表現方法のDFUDSの紹介でtxも使用と書いてあるのは、公開しているtxでは、 LOUDSのみをつかっていますので正確ではありませんでした。これ

    PFIセミナー資料: 研究開発2009 - DO++
  • トーナメントと多値分類 - DO++

    今やってる研究で、トーナメント問題を調べる機会がありました。 トーナメントは私も知らなかったのですが、勝者や順位を決める方式のことを指し、いわゆる二人ずつ戦って生き残っていく方式はノックアウトトーナメントといわれるそうです(wikipedia)。 #10000人戦う時にノックアウトトーナメントでは何回試合が行われるかというのはよくある質問ですね。 で、このトーナメント方式というのは調べてみると非常に様々なものがあります 例えばスイス式トーナメントは、最初はランダムな組み合わせで対戦、次は勝者同士と敗者同士、その次は全勝・1勝1敗・2戦全敗のそれぞれが・・というふうに同じ成績の人同士で戦う方式です。レーティングを計算して、レーティングが近いもの同士を戦わせるような拡張もあります。近いのは将棋でやってるようなものですね。 利点は全ての人が同じ試合数で戦い、また厳密な順位が決めやすいことがありま

    トーナメントと多値分類 - DO++
  • オンラインEMアルゴリズム - DO++

    EMアルゴリズム(Expectation Maximizationアルゴリズム、期待値最大化法、以下EMと呼ぶ)は、データに観測できない隠れ変数(潜在変数)がある場合のパラメータ推定を行う時に有用な手法である。 EMは何それという人のために簡単な説明を下の方に書いたので読んでみてください。 EMのきちんとした説明なら持橋さんによる解説「自然言語処理のための変分ベイズ法」や「計算統計 I―確率計算の新しい手法 統計科学のフロンティア 11」が丁寧でわかりやすい。 EMは教師無学習では中心的な手法であり、何か観測できない変数を含めた確率モデルを作ってその確率モデルの尤度を最大化するという枠組みで、観測できなかった変数はなんだったのかを推定する場合に用いられる。 例えば自然言語処理に限っていえば文書や単語クラスタリングから、文法推定、形態素解析、機械翻訳における単語アライメントなどで使われる。

    オンラインEMアルゴリズム - DO++
  • レコメンド, LSH, Spectral Hashing - DO++

    WEB+DB press vol.49にレコメンド特集の記事をtkngさんと書きました。 内容は最初は、協調フィルタリングやコンテンツマッチの簡単な話から、特徴量をどのように表すか、大規模データをどのように処理するかにいき、特異値分解などの低ランク行列分解によるレコメンドやRestricted Boltzmann Machineといった最近のnetflix prizeの上位の手法など、かなり突っ込んだ議論もしてます。 個人的には三章でLocality Sensitive Hash(LSH)について扱っているあたりがお勧めです。 レコメンドの内部の問題を極言すると、データというのは疎な高次元の数値ベクトル(数百万次元とか)で表され、クエリでベクトルが与えられた時、これと似たようなベクトルを探してこいという問題になります。”似たような”を数学的にいえば、クエリのベクトルとの内積(各ベクトルは長

    レコメンド, LSH, Spectral Hashing - DO++
  • 自然言語処理の学会 - DO++

    プログラミング言語の学会に触発された作った。私視点で書いたので、間違ってたりしたら突っ込んでください。 自然言語処理は、情報検索、ウェブ、機械学習とかとの境界領域だったりするのですが、そういうのは除いてます。 大体の学会情報はACL wiki 論文はACL anthology から得られると思います ACL The Association for Computational Linguistics ACL2008 自然言語処理の一番でかい会議。理論からアプリケーションまで何でも集まるが、強いて言えば 機械翻訳、構文解析が多い。いろいろなワークショップ(10ぐらい)も併設される。 EMNLP Conference on Empirical Methods in Natural Language Processing EMNLP2008 言語情報から統計的な情報を取り出して機械学習を使って自然

    自然言語処理の学会 - DO++
  • DO++: 左傾赤黒木

    漢字で書くと仰々しいが、赤黒木 (wikipedia) red-black tree (english wikipedia)という平衡二分木で最も多くつかわれているデータ構造の、改善版が出てたそうだ。 left-leaning red-black tree (pdf) 日語に訳すと左傾赤黒木かな。簡単な漢字を並べている感じがしてしまう 赤黒木の詳細については、wikipediaなどをよんでもらうとして、これは更新時間が定数で更新箇所が局所的(これはマルチスレッドとかでロックする箇所をかなり細かい単位で、できるという強い利点もある)のだが、実装が結構面倒くさい。例えばC++ stl のmapとかの赤黒木の実装のstl_tree.h(google code search)は大変なことになっている(特にRb_tree_rebalance_for_eraseとか) 赤黒木というのは動的データ構造

    DO++: 左傾赤黒木
  • DO++ : 乱択アルゴリズム

    「乱択アルゴリズム」が共立出版から出ているので読んでいます 乱択アルゴリズム(wikipedia)(ランダマイズドアルゴリズムの方が一般的かもしれない)はアルゴリズムの中に(擬似)乱数が含まれており、動作が決定的ではなく、乱数に依存して動きます。 有名な例では、クイックソートのアルゴリズム中にピボットを選択するところがあるのですが、そこを決定的に最初や真ん中の値ではなく、適当に乱数でランダムに選んだ場合がそれに当たります。 クイックソートは最悪計算量が要素数がnの時、O(n^2)かかってしまう問題点がありますが、ランダムにピボットを選んだ場合、かなり高い確率でO(nlogn)で動作することが言えます。もっとはっきりいうと、比較の回数がαnlogn(αは5よりちょっと大きいぐらい)より大きくなる確率は1/(n^2)以下だということが言えます。つまりnが大きい場合は殆ど間違いなくO(nlogn

    DO++ : 乱択アルゴリズム
  • DO++: 機械学習による自然言語処理チュートリアル

    自然言語処理のときに使う機械学習手法のテクニックをざーっと2時間程度で紹介してほしいとのことだったので今日話してきました。基的に、そんなに頑張らなくても効果が大きいものを中心に説明(特にパーセプトロンとか)を説明してます。 紹介した手法はパーセプトロン、最大エントロピー、正則化、多クラス分類、系列分類(CRF, Structured Perceptron)などなどです。どれも一かじりする感じで網羅的に見る方を優先してます。個々の詳しい話はそれぞれの文献や実装などを当たってみてください。 スライド [ppt] [pdf] ここで話しているのは線形識別モデルの教師有り学習が中心で教師無し学習(クラスタリングなど)など他の自然言語処理を支える技術は省いてます。 こういうのを使って(使わなくてもいいけど)どんどんアプリケーション作らないといかんね。 Tarot is not used to ma

    DO++: 機械学習による自然言語処理チュートリアル
  • DO++: いろんな学会

    ICML/UAI/COLTのaccepted paperが出揃い、ざーっと面白そうなのを片っ端から読んでみました。 ICMLの読んでみた、読んでみたいリスト そのうちピックアップします。 ICMLは強化学習系が多くなっているなぁという気もしたのですがそうでもないかな。 ついでに、私が興味を持ってみている機械学習の学会(と一個ジャーナル)紹介を。これも境界領域なので他の学会で面白い話が発表されたりすることも多いです。 機械学習系 JMLR Journal of Machine Learning Research 機械学習の一番メジャーなジャーナルで出るスピードも速い(その年に学会発表されたものがその年のうちに出てくることも珍しくない)。全部web上からタダで論文を落とせる。よいですね ICML International Conference on Machine Learning 機械学習

    DO++: いろんな学会
    toruto
    toruto 2008/05/27
    学会まとめ
  • OLL: オンライン機械学習ライブラリをリリースしました。 - DO++

    様々なオンライン学習手法をサポートしたライブラリ「OLL (Online-Learning Library)」をリリースしました。 プロジェクトページ 日語詳細ページ 学習、推定を行なう単体プログラムと、C++ライブラリからなります。(C++ライブラリ解説はまだ)。 New BSDライセンス上で自由に使えます。使った場合は感想や苦情などいただけると幸いです。 オンライン学習とは、一つずつ訓練データを見てパラメータを更新していく手法で、訓練データをまとめて見てから学習するバッチ学習(SVMs, 最大エントロピー法)と比べて非常に効率良く学習を行なうことができます。それでいながらSVMs, やMEsに匹敵する精度が出ます。 学習するデータの性質にもよりますが、例えば、英語の文書分類タスクで、15000訓練例、130万種類の素性の訓練データに対する学習が1秒未満で終わります(SVMsだと実装に

    OLL: オンライン機械学習ライブラリをリリースしました。 - DO++
  • HMMの文字列分解による高速化 - DO++

    今年もよろしく 読んで面白かった研究紹介を。 "Speeding Up HMM Decoding and Training by Exploiting Sequence Repetitions" [pdf] S. Mozes, et. al. CPM 2007の best paper HMM(隠れマルコフモデル)は、観測できる状態の列(s1, s2, ..., sn)が与えられたとき、隠れ状態の列(h1, h2, .., hn)を次の確率が最大になるものとして求めます。 Π_{i =1to n} p(s_i|h_i) p(h_i | h_{i-1}) ・・・(1) 各隠れ状態は直前の隠れ状態にのみ依存した確率分布で生成され、観測された各状態は、各隠れ状態から生成されます。隠れマルコフモデルは非常に広い分野で使われており、音声認識やら、品詞推定やら、最近では生物情報など(DNAの列が与えられ

    HMMの文字列分解による高速化 - DO++
  • DO++: 教師あり学習の比較

    ICML2006に興味深い論文がありました。 "An Empirical Comparison of Supervised Learning Algorithm", Rich Caruana caruana and Alexandru Niculescu-Mizil [link] 90年代初め以降、数多くの画期的な教師あり学習が提案されてきましたが、どれがいいかを包括的に比較したことはあまりありませんでした (文書分類などでは、SVMとAda-boosting 強いねということだったのですが Sebastiani@ACM Survey 2002) 決着をつけようじゃないかということで、11の問題に対してハイパーパラメータも完璧にチューニングして、いろいろな分類器を比較しているみたいです。比較内容は精度や再現率やクロスエントロピーなど様々で、確率を直接出さないやつはsigmoid関数など単調

    DO++: 教師あり学習の比較
  • DO++: AND検索の最尤推定

    検索技術においてAND検索、つまり二つの単語を指定して、それが両方出現している文書数の推定を高速に行うのは難しい問題です。 問題を正しく書くと単語w_xが出ている文書番号(x1,x2,x3,..,xn)とw_yが出ている文書番号(y1,y2,y3,...,ym)が与えられたら | {(i,j)|x_i = y_j} | の数を求める問題です。 これは前もって全通り求めて保存しておくにも単語種類数の二乗のオーダー分必要なのでできません。 これは機械学習でも特徴関数が0/1の値しかとらないとき、二つの要素の特徴ベクトルの内積を求める問題と同じで、またデータベースでもJOINの順番を決めるときにでてくる問題です。 普通は全体の文書からサンプルをとって、その中で数えてみて、それを元のサイズにスケールさせることをします。例えば全体文書1億件の中から文書1000件だけとってきて、その中でw_xとw_y

    DO++: AND検索の最尤推定
    toruto
    toruto 2007/10/01
    シンプルだ。
  • DO++ : 機械学習の実用化

    プログラマがどうたらこうたらという話はあんまり乗らないけど このブログ 東大関連の話はkzkさんのを参考にしてもらうとして >もちろん、実装は中学生でもできることだ。 機械学習を実用化レベルに持っていくためにはかなりの総合力が必要だと思います。 数学的な知識や機械学習の知識はもちろん、数値最適化の各手法やデータ構造を使い分けて、高速化、省メモリをどう達成するか、現実世界に発生するモデル化しきれないノイズをどう取り除ければいいかとかまで考えないといけない。 そのまま作ると、重い、動かない、間違っている、なんかよく分からないのが出るってことになると思います。 やりがいのあり面白いですが、結構大変。 機械学習も流行っているのは流行っているかもしれんですが、圧縮とかこれらの全部機械学習と一括りするのは違う気がする。根底に流れているのは似ているけど 例えば、JMLR とかにある論文を読んでまともに動

    DO++ : 機械学習の実用化
  • 講義ビデオ - DO++

    一度は見てみたかった(知っている人は知っていて知らない人は全然知らない)有名人の話している講義ビデオが見られるvideolecturesというサイトがありますが、そこにICML2007の発表のいくつかがアップされてるようです。link よくみてみたら他の学会のもたくさんあるんですねlink2。

    講義ビデオ - DO++
  • 最大エントロピーモデル - DO++

    自分の復習も含め、最大エントロピーモデルについて勉強会で発表しました。発表資料 [ppt] [pdf] 今年のACLやICMLなどでの発表などを解説してます。論文中になかった式導出とかもしてみてます。 発表中では結構口頭で補足した部分があって、この資料だけでは不十分だと思います。適宜引用先などを参照してください。 最大エントロピーモデルは高次元の確率分布推定に適していて自然言語処理や、最近だと動植物がどのように分布しているかなどの推定等、広い分野で使われている確率モデルです。 #修正+質問・回答スライドを追加しました

    最大エントロピーモデル - DO++
  • Bayesian Sets - DO++

    Bayesian Sets, Z. Ghahramani, K. A. Heller, NIPS 2005 [paper] が面白い Google Setsにインスパイヤされたと書かれている。これが扱っている問題は、複数のクエリを与えた時に、それが含まれているだろうクラス/コンセプト/クラスター集合の残りの要素を返すという問題。このペーパーでも書かれている通り、clustring on demand という言葉がぴったりだと思う。 このペーパーでは、その問題をきちんと確率モデルで定式化していて、それは効率的に解けて、結果も(たぶん)いい。 このペーパーを見てまだもやもやしているのは、supervised clustring とどう違うのかという点。ざっと読んでみた感じだと、従来のクラスタリングでは正解のクラスタリングが一つ存在していて、それを求めるのに対し、今回のやつはおなじ要素でもクエリ

    Bayesian Sets - DO++
  • 1