タグ

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

  • オンライン最適化とRegret最小化 - DO++

    大量のデータから、何か有益な情報を求める問題の多くは最適化問題を解くことに帰着されます. 最適化問題とは与えられた関数fの値を最小(最大)にするような変数xを探すといった問題です。 例えば、機械学習(これを利用する自然言語処理、情報検索など)、画像処理、AI(ロボットの経路制御)、 など多くの分野で最適化問題は登場します。 その中でもオンライン最適化(機械学習の文脈でいえばオンライン学習)と呼ばれる最適化手法は 実用性の高さと実装のしやすさから多く利用されるようになってきました。 このオンライン最適化は近年Regret(後悔)最小化というゲーム理論などで使われていた枠組みで 解析されることが多くなってきました。 今回はこのRegret最小化について簡単に解説してみようと思います。 (機械学習が詳しい人向けに補足すると、VC次元など他の機械学習を解析する手法と比べてRegret最適化の面白い

    オンライン最適化とRegret最小化 - DO++
  • 連想配列の進化 - DO++

    キーに対して値を結びつける連想配列は多くのアプリケーションの肝であり、コンパクトかつ高速な処理が可能な連想配列を追い求め日夜研究が進められています。 特に非常に巨大な連想配列を高速に処理するというのが重要な課題となっています。例えば、音声認識・文字認識・機械翻訳などで使われている言語モデルでは、非常に大量のN個の単語列の情報(特に頻度)を格納することが重要になります。 この場合、キーが単語列であり、値が単語列のコーパス中での頻度に対応します。 例えばGoogle N-gram Corpusからは数十億種類ものN-gramのキーとその頻度などが取得できます。これらを主記憶上に格納し、それに関する情報(頻度や特徴情報)を操作することが必要になります。 そのほかにも大規模なデータを扱う問題の多くが巨大な連想配列を必要とします。 ここではこのような連想配列の中でも、キーの情報を格納することすら難し

    連想配列の進化 - DO++
  • 行列分解ライブラリredsvdを公開しました - DO++

    大規模疎行列向けの行列分解ライブラリredsvdを公開しました. redsvd 大規模疎行列向けの特異値分解や主成分分析,固有値分解を行うライブラリredsvdを公開しました. 修正BSDライセンスで公開しており,コマンドラインから使える他,C++ライブラリが用意されています. 例えば,行と列数がそれぞれ10万,非零の要素が1000万からなる疎行列に対する上位20位までの特異値分解を約2秒で処理します. 特異値分解とか,使っている技術の詳細とか応用事例を以下に簡単に紹介しましたので,興味のある方は参考にしてください. 特異値分解とは まず行列を適当に復習します.行列Xの転置をX^tと表すことにします.またIを単位行列とし,Oを全ての成分が0である零行列とします.また,行列XX^t=IであるようなXを直交行列と呼びます.Xが直交行列の時,Xvはベクトルvを長さを変えずに回転させます.ここでは

    行列分解ライブラリredsvdを公開しました - DO++
  • C++の便利ツール・ライブラリ - DO++

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

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

    最近日記書いてなかったですが、なかなか日記に書けることがなかったのと、書こうと思ったときにココログがメンテナンスしていたからです。まぁそうはいってもココログは使い続けます。 最近読んだ中でおもしろかった論文 "Online Passive-Aggressive Algorithms" Koby Crammer, Ofer Dekel, Joseph Keshet, Shai Shalev-Shwartz and Yoram Singer, Journal of Machine Learning Research 7, pages 551-585, 2006. [pdf] オンライン学習でバイナリ、多クラス、構造を持った出力(これに近いmiraについては kudoさんによる解説参照)を学習できる。perceptronと似たような形で学習でき、非常に簡単な更新式でパラメータを更新していく。 実

    師走 - DO++
    tettsyun
    tettsyun 2010/03/07
    Passive Aggressive の話
  • 疎なbit arrayに対する現実的なRank/Selectデータ構造 - DO++

    久しぶりに研究紹介。 最近書いた論文です。 "Practical Entropy-Compressed Rank/Select Dictionary.", Daisuke Okanohara and Kunihiko Sadakane. In the Proc. of ALENEX 2007, to appear[paper] この論文では、疎なbit array B[0...n-1]に対するrank/select操作を高速に実現するデータ構造を4つ提案しています。 rank(x)はB[0...x]中にある1の数を返し、select(x)はx番目の1の位置を返す関数です。 古典的な問題ですが、これを最小(entropyに近い限界)かつ高速(定数時間、もしくはそれに近い時間)で実現する現実的なデータ構造は存在しませんでした。これを4つの違ったデータ構造で実現したというものです。 このデータ構

    疎なbit arrayに対する現実的なRank/Selectデータ構造 - DO++
  • Core Vector Machine - DO++

    SVMをはじめとした、多くの"Kernel法を利用した凸二次計画法問題"は、ある条件(自分自身同士のカーネル値が常に定数)を満たしていれば、適切に問題を変換することで最小包含球問題として解けることが知られている(core vector machine [google scholar] )。 凸二次計画法問題は入力データサイズに対してスケールせず、訓練データ数が1万以上とか多くなるととたんに破綻するのに対して、最小包含球問題は近似法がいくつか知られており、それらを利用すれば大規模な訓練データを利用した学習が可能となる。 で、その最小包含球の近似法の一つに中心を適当に決めて半径を決めた後に、球から外れている要素をぽこぽこ追加し、半径を最小にしつつ中心を更新していく方法が提案されたが[link]、結局中心の更新式がPassive-Agressive Learning[link]と殆どに似た形にな

    Core Vector Machine - DO++
    tettsyun
    tettsyun 2010/03/07
    パラメータの更新式がPassive Aggressiveにほとんど似ている
  • 最大エントロピーモデル - DO++

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

    最大エントロピーモデル - DO++
  • 凸最適化 - DO++

    凸最適化問題に触れる機会が多くなり、復習しています 凸最適についてはboydが有名ですが(なによりpdfがおいてある)、730pは読むのが大変です。講義用スライドが絵も多くおすすめです。 凸最適といえば、離散凸最適もちゃんとおさえときたいですが、よさそうなチュートリアルとかはないですかねぇ。 凸が縦に並ぶとおもしろいなぁ

    凸最適化 - DO++
    tettsyun
    tettsyun 2010/03/07
    convex optimization のリンク
  • オンラインEMアルゴリズム - DO++

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

    オンラインEMアルゴリズム - DO++
  • fujimap: 簡潔な連想配列 - DO++

    博論終わったので仕事の合間にfujimapというライブラリを作ってみました。 fujimap project fujimapは作業領域が非常に小さい連想配列で、文字列からなるKeyを利用して、整数値もしくは文字列からなるValueを登録・参照することができるライブラリです。 今巷では大規模なKey Value Stroe (KVS)が流行っていますがFujimapは一台のマシンのメモリ上で動作することを想定して作成されています.Fujimapの特徴は必要な作業領域量が非常に小さいことです.キー自体を明示的に保存しないため、作業領域は値を格納するのに必要なサイズと、許容するfalse positive(後述)にのみ依存します。 例えば、google N-gramのunigramの約1300万キーワードとそれらの頻度の対数を記録する場合、false positiveを気にしないなら、一キーワー

    fujimap: 簡潔な連想配列 - DO++
    tettsyun
    tettsyun 2010/02/23
    false positive を許して情報理論的限界を破ることで作業領域を改善
  • Top-k文書列挙問題 - DO++

    いろいろとありまして去年読んだ論文で面白かったものランキングとか書けなかったのが残念ですが、もしあげるとしたら次の論文は入れると思います(知ったのは年明けだったけど)。 "Space-Efficient Framework for Top-k String Retrieval Problems", FOCS 2009, Wing Kai Hon, Rahul Shah and Jeffrey Scott Vitter (pdf) 扱っているのは次のような問題です(説明のため来のと言い換えています) n個の葉からなる木が入力として与えられ,各葉には色(1以上d以下の整数とします)が与えられています. この時、木中の任意の節点と正整数kがクエリとして与えられたときに、その節点の子孫の中で出現回数が大きい色を順にk個答えよという問題です。 簡単に思いつくのは,各節点に適当な個数(d)の答えをあ

    Top-k文書列挙問題 - DO++
  • SODA2010 ALENEX2010@テキサス - DO++

    先日までTexas Austinで開催されていたALENEX2010とSODA2010に参加してきました。 一緒に行った吉田さんの感想もありますのでそれも参照してください まず一応自分のALENEXでの発表資料は以下にありますので参照ください "Conjunctive Filter: Conjunctive Filter: Breaking the Entropy Barrier"論文、発表スライド(pptx pdf) 他に聞いた中で印象的だったものを下に書いてみます。ただ、大部分の発表は私の基礎知識が足りなくてついていけませんでした。残念 昨年末の研究開発セミナーでも紹介しましたが、簡潔木とよばれる限界まで圧縮した上で(ノード数がnの時2n+o(n) bit)様々な木上での操作(親を辿る、子を辿る、共通祖先を探すなど)のあらゆる操作を統一された操作の組み合わせで実現するというものの理論的

    SODA2010 ALENEX2010@テキサス - DO++
  • Burrows-Wheeler変換の線形時間アルゴリズム - DO++

    研究紹介です。今夏のSPIRE 2009という学会で "A Linear-Time Burrows-Wheeler Transform using Induced Sorting", D. Okanohara, K. Sadakane, SPIRE 2009 pdf(draft) というのを発表します。これは与えられた文字列に対し接尾辞配列を経ないでBurrows-Wheeler変換を直接行うというもので、アルファベットサイズによらず入力長に対して線形時間で行えます。基的なアイディアは昨年のInduced Sortingによる接尾辞配列の線形時間構築アルゴリズム(いわゆるSAIS)を接尾辞配列を使わないでシミュレートするものです。pushとpop操作だけからなり、そのまま外部記憶上での構築とかにも対応できるようになっています。 Burrows-Wheeler変換(BWT, Block S

    Burrows-Wheeler変換の線形時間アルゴリズム - 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++ : 線形識別器チュートリアル

    ワークショップ中の夕で話したのですが、今のところ日で(素性関数ベース&線形識別器)機械学習のいろいろな手法をまとめて体系的に教えてる資料などがあまりないなぁという話をしていました。 で、探すと、このあたりの大部分をまとめて説明しているいいチュートリアル(英語)がありました。 夏の学校資料[pdf] その他のコードやリンク ちょっとだけ解説 現在自然言語処理の多くで使われている学習器は線形識別器です。 入力x(例:単語、文、文書)から出力y(例:品詞、品詞列、文書のトピック)を予測したいという場合は、(x,y)のペアからいろいろな値を取り出し(x,yのペアから値を取り出す関数を素性関数と呼ぶ)、その値を並べたベクトルを素性ベクトルと呼び、f(x,y)とかきます。そして、その素性ベクトルf(x,y)と同じ次元数を持つ重みベクトルwとの内積を測って、その値が正か負か、または大きいか小さいかを

    DO++ : 線形識別器チュートリアル
    tettsyun
    tettsyun 2009/11/01
    tutorial
  • 天気予報から機械学習、金融工学まで - DO++

    もう随分経ちますが,先日CompView秋の学校というのに行き,2泊3日みっちり機会学習を勉強してきました.講師陣は豪華でどの話も面白かったのですが特にElad Hazanによる"Prediction in the dark: the multi-armed bandit problem"が非常に面白かったです. その話を説明するために,まず簡単ながら驚くべき性能を達成するアルゴリズムを紹介しましょう. 解きたい問題は,毎日,次の日の天気が晴れか雨かを予想する問題です.t日目が晴れの場合 y(t)=1, 雨の場合 y(t)=0と表すことにしましょう.t日目にy(t+1)を予想するわけです. さて、自分は天気の専門家ではないので,自分で予報せずに,専門家に頼ることにしてみます.M人の天気予報士がいて,それぞれが独自に次の日の天気を予想しています.i人目の天気予報士のt日目の予報をp(i,t)

    天気予報から機械学習、金融工学まで - DO++
  • 1