タグ

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

  • C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記

    C/C++でプログラムを書いているときに遭遇する厄介なバグの一つがメモリリークです。 今回はメモリリークを検出するのに使えるツールの使い方について書きます。 AddressSanitizer コンパイルオプションをつけるだけで使えて出力も見やすいのでおすすめです。 AddressSanitizerはGCC 4.8以降かLLVM 3.1以降で使うことができます。 コンパイル時にオプションをつけるだけでメモリリークを検出してくれます。(若干実行時間が長くなります) 以下のメモリリークのあるプログラム leak.cpp を例に使い方を説明します。 int main() { int *a = new int[10]; } newで作った動的配列をdeleteしていないのでメモリリークになります。 g++ -fsanitize=address -fno-omit-frame-pointer -g l

    C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記
  • 閉殻Hartree-Fock法によるHeH+のエネルギー計算 - kivantium活動日記

    量子化学計算を勉強するために新しい量子化学―電子構造の理論入門〈上〉を読んでいます。 サンプルコードがFortranだったので勉強がてらC言語に移植しました。 新しい量子化学―電子構造の理論入門〈上〉 作者:Attila Szabo,Neil S. Ostlund出版社/メーカー: 東京大学出版会発売日: 1987/07/01メディア: 単行 理論 で200ページくらいかけて説明されている内容をブログに書くのは大変なので省略します。 ちなみに、以下のツイートの「100ページかけて説明してる別の」はこのを指します。 難しい内容を易しく簡潔に説明しようとするのは大変で、難しい内容は難しいまま長い時間をかけて説明する必要があるのだなぁという学びがありました。 あるで30ページで説明されてて何も分からなかった内容を100ページで説明してる別の読んだら完全に理解して何が分からなかったのか

    閉殻Hartree-Fock法によるHeH+のエネルギー計算 - kivantium活動日記
  • 帰無仮説のもとでp値の分布が一様分布になることの証明 - kivantium活動日記

    帰無仮説のもとでp値の分布が一様分布になるらしいのですが、納得できるちゃんとした証明が検索しても出てこなかったので書いておきます。 p値とは何かとか、帰無仮説とは何かみたいな解説は省略します。 証明 を観測値の帰無仮説の分布、をの累積分布関数 をp値の分布、をの累積分布関数とする。 は連続分布で、が逆関数を持つものと仮定する。 (注: 分布の累積分布関数はを満たすような関数) 観測値が帰無仮説に従うとき、が上の一様分布であることを示す。 上の一様分布の累積分布関数は上でという値を取ることと、p値は上の値しか取らないことから、であることを示せばが上の一様分布に従うことが分かる。 観測値がのときのp値をとするとp値の定義より が成り立つ。 (が連続分布と仮定しているので) また、が単調増加することから、 が成り立つ。 以上より、 したがって、であることが分かったのでp値が上の一様分布であること

    帰無仮説のもとでp値の分布が一様分布になることの証明 - 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活動日記
  • ボトムアップ型自動微分の実験 - kivantium活動日記

    Deep Learningの関係で自動微分が脚光を浴びつつあるような気がしますが、自動微分を解説したページは少なくまだまだマイナーな分野だと思います。先日ようやく「アルゴリズムの自動微分と応用」を一通り眺めたのでいろいろ実験して遊んでいます。今日は自動微分のうち、ボトムアップ型自動微分をオペレータオーバーロードを用いて実現する方法について書きます。 自動微分とは 自動微分は、アルゴリズムによって定義された関数からその関数の偏導関数値を計算するアルゴリズムを導出するための技術です。一般的にはのような関数が先にあって、その関数を計算するアルゴリズムやプログラムがあるというように考えますが、自動微分ではどちらかというとアルゴリズムが先にあってアルゴリズムが表現する関数が生まれるというような考え方をします。 プログラムで微分を扱う上でよく知られている技術には数値微分と数式微分があります。 数値微分

    ボトムアップ型自動微分の実験 - 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活動日記
  • Chainerで学ぶLSTM - kivantium活動日記

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

    Chainerで学ぶLSTM - 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活動日記
  • 1