タグ

ブックマーク / kivantium.hateblo.jp (18)

  • C++を使ったEMアルゴリズムの実装(+Pythonによるプロット) - kivantium活動日記

    複数のガウス分布を重ねあわせてできる混合ガウス分布はある程度複雑な分布を近似するときに使われ、Fisher Vectorや声質変換、手書き漢字変換などの応用がある重要な分布です。今回はEMアルゴリズムを用いて混合ガウス分布による近似を求めるプログラムを実装してみました。 EMアルゴリズムは混合ガウス分布以外にも使えるアルゴリズムですが、ここでは混合ガウス分布に話を限定しています。 EMアルゴリズム 式はPRML第9章に従います。いつものようにベクトルの太字は省略しています。 混合ガウス分布は という形で表される分布です。 はk番目のガウス分布の割合を表し、とを満たします。 D次元ガウス分布は という式で表されます。 式変形を楽にするために、潜在変数zを導入します。 K次元ベクトルを、どれか一つの要素だけが1で他の全ての要素が0であるようなベクトルとします。 zの確率分布は、とを満たすを用い

    C++を使ったEMアルゴリズムの実装(+Pythonによるプロット) - kivantium活動日記
  • Chainerの練習 - kivantium活動日記

    畳み込みニューラルネットワーク(CNN)において、第一層の学習結果はエッジ検出などに用いられるフィルタに近いものになりやすいことが知られています。このことから、層を重ねることによって高次の特徴を抽出することができるようになったことがCNNが成功した理由なのではないかという議論もあります。 エッジ検出を行うフィルタには何種類もありますが、ここではラプラシアンフィルタを取り上げます。OpenCVではLaplacian()という関数に実装されています。一番簡単なものだと という行列を、あるピクセルを中心とする3x3の領域に掛けて総和をそのピクセルの値とするという感じの処理をするようです。 今回はChainerの練習としてこのLaplacianが学習できるかどうかやってみます。最初のCNNの話は特に関係ありません。 コード ChainerでLaplacianと同じconvolutionを行って作っ

    Chainerの練習 - kivantium活動日記
  • Travis CIによるC言語プログラムの自動テスト - kivantium活動日記

    自動テストはエンジニアの必須スキル!という話を最近よく聞くのですが、テストをやったことがなかったのでTravis CIで試してみました。 Travis CIとは Travis CIは自動テスト実行サービスで、GitHubと連携してpushした際に自動でテストを行ってくれるところが特徴です。 GitHubと連携できる継続的インテグレーションツール「Travis CI」入門 - さくらのナレッジに従って登録等を行いました。 設定ファイルの記述 Travis CIの設定はリポジトリのルートディレクトリに.travis.ymlというファイルを置くことで行います。 Travis CIはテストのたびに仮想マシンを立ち上げてその中でテストが走るのですが、.travis.ymlにはマシンの環境設定に関する事項と、実際にテストする内容をステップごとに記述していきます。 installステップ: テストに必要

    Travis CIによるC言語プログラムの自動テスト - kivantium活動日記
  • k-meansを用いた画像の色クラスタリング - kivantium活動日記

    ご注文は機械学習ですか?を改良するべくDeep Learningなどに手を出しているわけですが、Deep Learningを行うためには大量の学習データが必要になります。学習データを一から手動で分類するのも馬鹿らしいので、今出来ている部分を使ってある程度自動化したいと思います。現状のプログラムだと精度が低いので何らかの方法で精度を上げたいと思います。というわけで、 アニメ作品における人物キャラクター画像の萌え特徴分析とその応用にある手法を用いて髪部分のみを抽出することで精度を上げてみようと試してみました。 処理の流れ 元論文ではメディアンカットによる減色→クラスター併合とK-means法を用いて6クラスタに併合→肌・髪・目レイヤーの特定という流れで進んでいます。実装が公開されていないのでこの情報から手法を再現する必要があります。 とりあえず、減色・クラスタリングまでを行ってみようと思います

    k-meansを用いた画像の色クラスタリング - kivantium活動日記
  • 精度保証付き数値計算(その1) - kivantium活動日記

    コンピュータ上で実数を表現する際には浮動小数点数を使うのですが、浮動小数点数の計算では誤差が発生します。 簡単な例を見てみます。 #include <cstdio> int main(void) { float a = 0.0; for(int i=0; i<10000; ++i) a += 0.01; printf("%.10f\n", a); } という0.01を10000回足すプログラムを実行すると結果は100.0029525757となり、期待される100.000000000に比べて0.003ほどの誤差が発生しています。 浮動小数点数計算での誤差を抑える一番簡単な方法はfloatではなくdoubleなどのより精度の高い型を使って計算精度を上げることですが、どうしても限界はあります。 他にも問題ごとにテクニックは存在しますが、誤差を完全に無くすことはできません。 正確な計算のためには誤

    精度保証付き数値計算(その1) - kivantium活動日記
  • Faster R-CNNの紹介 - kivantium活動日記

    はじめに 今までいろんな画像処理のプログラムを書いてきましたが、その多くで物体検出のアルゴリズムを使っています。 ご注文は機械学習ですか?・結城友奈はサンタであるなどの記事ではOpenCVでアニメ顔検出をやってみたで紹介したlbpcascade_animefaceを使いました。これは2001年のViolaとJonesの論文で提案された方法に1994年(くらい)に提案されたLBP特徴量を組み合わせた、2008年の論文の方法を応用したもの(多分)です。 友利奈緒判定botではdlibによるHOG特徴を用いた物体検出がすごいで紹介したHOG特徴量とSVMを組み合わせた方法を使っています。これは2005年の人検出に関する論文の方法を使ったものです。 どのプログラムでも物体検出した後の判定精度はそれなりに高いのに、物体検出の精度の低さが全体の完成度を下げている感じになってしまっていました。2005年

    Faster R-CNNの紹介 - kivantium活動日記
  • OpenCVでの物体検出器作成 - kivantium活動日記

    OpenCVのオブジェクト検出器作成方法についての解説です。 学習データの作成 まず最初にオブジェクト検出器の学習に使う教師データを用意する必要があります。そのためにまずGUIでオブジェクトの位置を指定するGUIツールを作りました。 PythonOpenCVを使います。 #!/usr/bin/env python #! -*- coding: utf-8 -*- import cv2 import numpy as np import sys drawing = False sx, sy = 0, 0 gx, gy = 0, 0 rectangles = [] ok = False def draw_circle(event,x,y,flags,param): global sx, sy, gx, gy, drawing if event == cv2.EVENT_LBUTTONDOWN

    OpenCVでの物体検出器作成 - kivantium活動日記
  • 全探索によるニューラルネットワーク最適化の実験 - kivantium活動日記

    先月に[1602.02830] Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1というニューラルネットワークを二値化して計算する論文が発表されました。(訂正:2つの論文があるように記述していましたが、両者は同じチームによる単なるバージョン違いだったようです) 2値化して十分な精度が出るのであれば専用ハードウェアを構成することでニューラルネットワークの計算を大幅に高速化できる可能性があります。また、演算器を100個並べられるなら、どんなソートアルゴリズムを使う?:Fluentd、Memcached、IoT、ドローン、機械学習、映像解析――ソフトとハードを隔てる壁が壊れつつある今、ITエンジニアは現実的に何ができるようになるの

    全探索によるニューラルネットワーク最適化の実験 - kivantium活動日記
  • オンライン学習アルゴリズムAROWについて - kivantium活動日記

    以前AROWを使った記事を書きました(Caffeによる特徴抽出+AROWによる分類を試した - kivantium活動日記)が、AROWの内部を全然知らずに使っていたので勉強しました。その記録です。 ここの記述が様々なオンライン学習アルゴリズムの特徴をうまく説明していたので参考にするといいかもしれません。kazoo04.hatenablog.com オンライン機械学習についてはこういうが出ていて評判も良いです。(ここで唐突に貼られるAmazonへのリンク) オンライン機械学習 (機械学習プロフェッショナルシリーズ) 作者: 海野裕也,岡野原大輔,得居誠也,徳永拓之出版社/メーカー: 講談社発売日: 2015/04/08メディア: 単行(ソフトカバー)この商品を含むブログ (3件) を見る オンライン学習アルゴリズムとは SVMなどの機械学習アルゴリズムでは分類を行う前に全ての学習データ

    オンライン学習アルゴリズムAROWについて - kivantium活動日記
  • Chainerで学ぶLSTM - kivantium活動日記

    このブログで何回も取り上げているように、ニューラルネットワークを用いた機械学習はかなりの力を発揮します。畳み込みニューラルネットワーク(convolutional neural network, CNN)は画像中で近くにあるピクセル同士の関係に注目するなど画像の特徴をうまくとらえたネットワークを構築することでかなりの成功を収めています。ノーフリーランチ定理が示唆するように万能の機械学習器は存在しないため、対象とするデータの特徴を捉えた学習器を構築することが機械学習の精度を上げる上で重要になります。 そこで今回は時系列データの解析に向いた回帰結合ニューラルネットワーク(recurrent neural network, RNN)の精度を上げるのに重要なLSTMを取り上げます。 この記事では誤差逆伝搬などのニューラルネットワークの基知識は説明しません。誤差逆伝搬についてはPRMLの5章やNe

    Chainerで学ぶLSTM - kivantium活動日記
  • 絶対に働きたくない - kivantium活動日記

    僕の人生の目標の一つは人類が労働しないで済む世の中を実現することになのですが、現在の世界は残念ながら労働しないと金が入らない仕組みになっているようです。金がないと何をやるにも困るのでなんとかして働かずに金を手にいれたいと思います。労せずに金を得る手段として有力なものの一つが投資です。機械学習投資対象の予測を行って儲けることができれば、人工知能が人類(僕)を労働から解放したと言ってもよいでしょう! というわけで機械学習で市場の予測を行いたいと思います。 投資対象の選定 投資をやると決めたからには儲かりそうなものに投資する必要があります。主な投資対象としては株式などの債権、FXなどの外国為替、国債、不動産などがありますが、短期間で価格変動があり、かつ有り金を全部溶かさない程度のリスクで収まる対象として、とりあえず株式を選択しました。 株式といってもいろいろな銘柄があるわけですが、会社ごとに投

    絶対に働きたくない - kivantium活動日記
  • コンストラスティブ・ダイバージェンス法を用いた制限ボルツマンマシン(RBM)の実装 - kivantium活動日記

    この記事はDeep Learning Advent Calendar 2015の1日目です。 早いもので2015年も最後の月になってしまいました。2015年は「ディープラーニング」という単語が(残念ながらバズワードとして)それなりに広まった一年だったと思います。Deep Learning Advent Calendarがそんな2015年の締めくくりにふさわしいものになりますように。 この記事ではDeep Learningの一種である深層ボルツマンマシン(DBM)の基礎となる制限ボルツマンマシン(RBM)について理論から説明していき、C++による実装を示します。実装を行う関係上どうしても数式を多用しますがなるべく式変形を丁寧に示すつもりです。数式は基的に 深層学習: Deep Learning 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知

    コンストラスティブ・ダイバージェンス法を用いた制限ボルツマンマシン(RBM)の実装 - kivantium活動日記
  • 強化学習で考えるギャンブラーの最適行動 - kivantium活動日記

    強化学習と呼ばれる機械学習の一分野があります。機械学習というと、入力に対して正解の出力を当てる教師あり学習が話題になることが多いですが、強化学習では明示的に正解が与えられません。ある行動を試してみて、それに対して得られる「報酬」から自分でどのような行動が良い結果をもたらすのかを判断して、より良い行動を学習するアルゴリズムになっています。 強化学習にはチェスやリバーシなどといったボードゲームAIやロボットの行動学習などの応用例があります。この前話題になったDeep Q Network、通称DQNも強化学習の一種です。応用例が面白いにも関わらず、PRMLなどの主要な機械学習の教科書では強化学習を扱わないことが多いので、いま強化学習だけの参考書を買って勉強しています。 強化学習 作者: Richard S.Sutton,Andrew G.Barto,三上貞芳,皆川雅章出版社/メーカー: 森北出

    強化学習で考えるギャンブラーの最適行動 - kivantium活動日記
  • ご注文はDeep Learningですか? - kivantium活動日記

    先日Deep Learningでラブライブ!キャラを識別するという記事が話題になっていました。この記事で紹介されている SIG2D 2014を知り合いから貸してもらったので参考にしながら、ご注文は機械学習ですか?のDeep Learning版を作ってみました。 Caffeなど必要なソフトのインストール Ubuntu 14.04の場合は過去記事を参照してください。これ以外にもpython-opencvなどを使いますが、依存関係の全ては把握できていないのでエラーが出たら適宜インストールしてください。 データの準備 Deep Learningでは大量の学習データが必要になると言われているので、まずは大量のデータを用意します。参考記事では6000枚のラブライブ画像を使ったということなので対抗して12000枚以上のごちうさ画像を用意したいと思います。それだけのデータを手動で分類するとそれだけで時間が

    ご注文はDeep Learningですか? - kivantium活動日記
  • Caffeによる特徴抽出+AROWによる分類を試した - kivantium活動日記

    Deep Learningのすごいところとしてよく挙げられるのは「画像から自動で特徴抽出をしてくれる」ことです。従来の手法であればタスクに合わせた画像の特徴をうまく抜き出すような特徴量を作る必要がありましたが、Deep Learningではネットワークが勝手に「特徴」を抽出してくれます。ネットワークが抽出した特徴量を使って別の分類器を学習させて分類することもできます。Deep Learningが自動で作った特徴量を使うことで人間が作ったSIFTなどの特徴量よりも高い精度で分類が可能になることもあるようです。 そこで今回はDeep LearningライブラリのCaffeを使って特徴抽出を行った後、AROWというアルゴリズムを使って分類を行ってみたいと思います。 Caffeによる特徴抽出 Caffe | Feature extraction with Caffe C++ code.とCaffe

    Caffeによる特徴抽出+AROWによる分類を試した - kivantium活動日記
  • C++によるSMOを用いたSVMの実装 - kivantium活動日記

    機械学習の手法にはいろいろありますが、その中でもサポートベクトルマシン(SVM; support vector machine)は高い精度で知られる有名な手法です。 以前C++で多層パーセプトロンを実装したので、今度はSVMをC++で実装してみました。kivantium.hateblo.jp SVMの解説 実装する前にSVMの原理を説明します。PRML下巻7章を参考にしました。 パターン認識と機械学習 下 (ベイズ理論による統計的予測) 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松裕治,村田昇出版社/メーカー: 丸善出版発売日: 2012/02/29メディア: 単行購入: 6人 クリック: 14回この商品を含むブログを見る SVMは2値分類に使われる手法で、入力に対してある関数を計算してその値の符号によってクラス分類をします。 入力(ベクトルですが、うまく表記出来ないの

    C++によるSMOを用いたSVMの実装 - kivantium活動日記
  • ご注文は機械学習ですか? - kivantium活動日記

    先日書いたOpenCVでアニメ顔検出をやってみた - kivantium活動日記の続編です。アニメ顔を検出するところまではうまくいったので、今度はキャラの分類をやってみようと思います。環境はUbuntu 14.10です。 ひと目で、尋常でない検出器だと見抜いたよ まずは分類に使う学習用データを用意します。投稿から半年以上経つのにまだランキング上位に残っている驚異の動画ご注文はうさぎですか? 第1羽「ひと目で、尋常でないもふもふだと見抜いたよ」 アニメ/動画 - ニコニコ動画を使います。 動画のダウンロード Ubuntuならaptで入れられるnicovideo-dlというツールを使います。 sudo apt-get install nicovideo-dl nicovideo-dl www.nicovideo.jp/watch/1397552685その後avidemuxでOP部分だけの動画を

    ご注文は機械学習ですか? - kivantium活動日記
  • SATをサッと解く 〜乱択アルゴリズムで遊んだ話〜 - kivantium活動日記

    ミレニアム問題と呼ばれる数学の7つの難問がある。各分野で重要かつ難しい問題が選ばれており、解決するとクレイ研究所から100万ドルの賞金を得ることができるということで有名だ。そのうちの1つポアンカレ予想は解決済みだが、残りの6つは未解決である。その中でもコンピュータ科学で非常に重要な問題が「P≠NP予想」である P≠NP予想とは コンピュータで問題を解決するときには一定の手続き(アルゴリズム)に従って問題を処理することになる。例えば数の集合の中からある特定の数字を見つけるという問題を考える。一番単純な解決方法は集合の要素を1つずつ調べていって値が求めたい数字になっているかどうかチェックすることだろう。この場合、集合がN個の数字からなるとすればおおよそNに比例する時間で求めたい数字の検索が終わることが予想できる。このようにだいたいNに比例する時間で終わるようなアルゴリズムについて、計算時間のオ

    SATをサッと解く 〜乱択アルゴリズムで遊んだ話〜 - kivantium活動日記
  • 1