タグ

ブックマーク / postd.cc (26)

  • 勾配降下法の最適化アルゴリズムを概観する | POSTD

    (編注:2020/10/01、2016/07/29、いただいたフィードバックをもとに記事を修正いたしました。) 目次: さまざまな勾配降下法 バッチ勾配降下法 確率的勾配降下法 ミニバッチ勾配降下法 課題 勾配降下法を最適化するアルゴリズム Momentum(慣性) Nesterovの加速勾配降下法 Adagrad Adadelta RMSprop Adam アルゴリズムの可視化 どのオプティマイザを選ぶべき? SGDの並列化と分散化 Hogwild! Downpour SGD SGDのための遅延耐性アルゴリズム TensorFlow Elastic Averaging SGD 最適化されたSGDに対する更なる戦略 シャッフル学習とカリキュラム学習 バッチ正規化 早期終了 勾配ノイズ 結論 参考文献 勾配降下法は、最適化のための最も知られたアルゴリズムの1つです。これまではニューラルネット

    勾配降下法の最適化アルゴリズムを概観する | POSTD
  • 大学院生のためのLLVM | POSTD

    (注:2017/07/06、いただいたフィードバックを元に翻訳を修正いたしました。) この記事は、 LLVM コンパイラ基盤を使ってリサーチをする人のための入門書です。これを読めば、コンパイラに全く興味のない大学院生も、楽しみながらLLVMを使って優れた功績をあげられるようになるでしょう。 LLVMとは何か? LLVMは非常に優れていて、ハックしやすく、C言語やC++のような”ネイティブ”言語向けの、時代の先端を行くコンパイラです。 LLVMの素晴らしさに関しては他にも様々な話を聞くのではないでしょうか(JITコンパイラとしても使えるとか、C言語系列以外の様々な言語を強化できるとか、 App Storeからの新しい配信形態 であるとか、などなど)。もちろん全部当のことですが、今回の記事の目的としては、上述の定義が重要です。 LLVMが他のコンパイラと差別化される理由には、いくつかの大きな

  • Makeについて知っておくべき7つのこと | POSTD

    Make は、様々なタイプのファイルのビルド作業を自動的に行ってくれるシンプルかつ強力なツールです。しかしながら、makefileを書く際に問題にぶち当たるプログラマもいれば、Makeの基知識がないことで、既存のものを再発明してしまうプログラマもいます。 Makeの働き デフォルトでは、Makeは一番目のターゲットから開始します。このターゲットのことをデフォルトゴールと呼びます。 Makeはカレントディレクトリのmakefileを読み込み、一番初めのルールで処理を開始します。しかし、Makeが完全にこのルールを処理する前に、ルールが依存するファイルのためのルールを処理しなければなりません。各ファイルそれぞれは、自身のルールに従って処理されます。 実はこれは、各ターゲットの再帰的アルゴリズムになっています。 ターゲットをビルドするルールを見つける。ルールがないようであれば、Makeはうまく

    Makeについて知っておくべき7つのこと | POSTD
  • ディープラーニングにおけるセマンティックセグメンテーションのガイド2017年版 | POSTD

    Qureでは、私たちは通常、セグメンテーションとオブジェクト検出の問題に取り組んでいます。そのため、最先端技術の動向について検討することに関心があります。 稿では、セマンティックセグメンテーションに関する論文を検討します。セマンティックセグメンテーションの研究の多くは、自然界・現実世界の画像データセットを使用します。その結果を医療用画像に直接適用できるわけではありませんが、現実世界の画像に関する研究は医療用画像のものよりもずっと成熟しているので、これらの論文を見直してみたいと思います。 稿は、以下のような構成です。最初に セマンティックセグメンテーションの問題を説明 し、 アプローチ方法に関する概略 を述べます。最後に いくつかの興味深い論文を要約します。 今後の記事で、医療用画像が現実世界の画像となぜ異なるのかを説明する予定です。更に、今回の再検討から得たアプローチが、医療用画像の代

    ディープラーニングにおけるセマンティックセグメンテーションのガイド2017年版 | POSTD
  • ディープラーニングの限界 | POSTD

    (注:2017/04/08、いただいたフィードバックを元に翻訳を修正いたしました。 @liaoyuanw ) この記事は、私の著書 『Deep Learning with PythonPythonを使ったディープラーニング)』 (Manning Publications刊)の第9章2部を編集したものです。現状のディープラーニングの限界とその将来に関する2つのシリーズ記事の一部です。 既にディープラーニングに深く親しんでいる人を対象にしています(例:著書の1章から8章を読んだ人)。読者に相当の予備知識があるものと想定して書かれたものです。 ディープラーニング: 幾何学的観察 ディープラーニングに関して何より驚かされるのは、そのシンプルさです。10年前は、機械認識の問題において、勾配降下法で訓練したシンプルなパラメトリックモデルを使い、これほど見事な結果に到達するなど誰も想像しませんでした。

    ディープラーニングの限界 | POSTD
  • バージョンの充足可能性問題 | POSTD

    (注:2017/02/06、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) Dependency HellはNP完全ですが、この状況から脱却できるかもしれません。 パッケージにおけるバージョン選択の問題とは、完全である(全ての依存関係を満たしている)かつ互換性のある(互換性のない2つのパッケージが選択されていない)トップレベルパッケージPをビルドするために使われる依存関係の集合を見つけることです。ただし、菱形依存問題があるので、このようなセットは存在しない可能性があります。菱形依存問題とは、AはBとCが必要、BはDのバージョン2ではなくバージョン1が必要、CはDのバージョン1ではなくバージョン2が必要といったような問題のことです。この場合、Dの両方のバージョンを選択することはできないため、Aをビルドすることができないわけです。 パッケ

    バージョンの充足可能性問題 | POSTD
    xiangze
    xiangze 2018/03/01
  • 型安全性と統計計算 | POSTD

    私は大ざっぱに言って、統計学のコミュニティはコンピュータサイエンスの概念にもっと触れた方が恩恵を得られると考えています。その考えを基に、記事では、統計計算システムの振る舞いに関する規範論の展開に 型安全性 の概念を用いる可能性を説明します。また、そのような規範論によって、現行システムの誤用のされ方を明確にできることも論じます。それとともに、統計向けのより型安全な言語を実装しようという現実的提案に立ちはだかる数々の難題についても述べていきます。 コンピュータサイエンスにおける概念としての型安全性 Vijay Saraswat は、型安全な言語を以下のように定義しています。 ある言語内でデータに対して実行できる演算がそのデータの型に許可されたもののみであれば、その言語は型安全である。 個人的にはこの簡潔さは気に入っているのですが、いくつかの例を使って上記の定義を説明すれば多くの読者の皆さんに

    型安全性と統計計算 | POSTD
  • 画像処理入門講座 : OpenCVとPythonで始める画像処理 | POSTD

    この記事を書くに至ったきっかけ Recruse Centerでは、私は、画像処理の勉強に時間を費やしていました。独学をし始めた頃は、何をするものなのか全く理解しておらず、ただ、文字や輪郭、模様などを識別するのに役立ち、これらで面白いことができる、ということくらいの知識しかありませんでした。 私の情報源は、主にWikipediaや書籍、公開されている大学の講義ノートです。これらの資料に慣れ親しんでくるにつれ、画像処理の世界における基礎を伝えられる「入門向け画像処理」を望むようになりました。 これが、この記事を書こうと思ったきっかけです。 前提条件 この記事は、Pythonが扱えるということを前提に書いています。その他の事前知識は必要ありませんが、NumPyや行列計算に慣れていると理解しやすいでしょう。 初めに 使用するのは、PythonOpenCVPython 2.7 ^(1) 、iPy

    画像処理入門講座 : OpenCVとPythonで始める画像処理 | POSTD
  • 私が書いた最速のハッシュテーブル – PART 1 | POSTD

    結局、やり出したら止まりません。私は以前、” I Wrote a Fast Hashtable(私が書いた高速なハッシュテーブル) “という記事と、それに次いで” I Wrote a Faster Hashtable(私が書いたより高速なハッシュテーブル) “という記事をブログにアップしましたが、今回ついに、最速のハッシュテーブルを書き上げました。これが意味するところは、ルックアップがどのハッシュテーブルよりも速いということです。それに加えて、挿入や削除も(最速とまではいかないまでも)非常に速く行えます。 秘訣は、探索回数の上限を設定したロビンフッドハッシュ法を使用することです。ある要素が、その理想的な位置からX数以上、離れた位置にある場合、テーブルを拡張することで、全ての要素が、その大きなテーブル内において、理想的な位置に近づくようにします。結果的に、このやり方は非常にうまくいきました。

    私が書いた最速のハッシュテーブル – PART 1 | POSTD
    xiangze
    xiangze 2017/04/02
  • 私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD

    文:Daniel Sim 分析:Lee Shangqian、Daniel Sim、Clarence Ng ここ数ヶ月、シンガポールのMRT環状線では列車が何度も止まるものの、その原因が分からないため、通勤客の大きな混乱や心配の種となっていました。 私も多くの同僚と同じように環状線を使ってワンノースのオフィスに通っています。そのため、11月5日に列車が止まる原因を調査する依頼がチームに来た時は、ためらうことなく業務に携わることを志願しました。 鉄道運営会社SMRTと陸上交通庁(LTA)による事前調査から、いくつかの電車の信号を消失させる信号の干渉があり、それがインシデントを引き起こすことが既に分かっていました。信号が消失すると列車の安全機能である緊急ブレーキが作動するため、不規則に電車が止まる原因となります。 しかし8月に初めて発生した今回のインシデントは、不規則に起こっているように見えるた

    私たちはいかにして環状線で”悪さをする列車”を捕まえたか | プログラミング | POSTD
  • 確率的プログラミング | POSTD

    この数年で、プログラミング言語(PL)や機械学習のコミュニティは 確率的プログラミング(PP) を用いて、それぞれに共通する研究の関心事を明らかにしてきました。その概念は、抽象化のような強力なPLのコンセプトを”エクスポート”し、現状では複雑で困難な作業である統計的モデリングに再利用することができるかもしれない、というところにあります。 (講義ノートの 最新版 を閲覧したい方は、リンクをクリックしてください。ソースは GitHub に投稿してあります。誤りを発見した場合は、Pull Requestを送信してください。) 1. 何、そしてなぜ 1.1. 確率的プログラミングは○○○ではない 直観に反して、確率的プログラミングとは確率的に振る舞うソフトウェアを書くことでは ありません。 例えば、暗号のキー・ジェネレータやOSカーネルでの ASLR の実装、または回路設計のための 焼きなまし法

    確率的プログラミング | POSTD
  • Python 3を使うべきでない場合(なんてない) | POSTD

    数日前、著名なライターで開発者でもあるZed Shawが “The Case Against Python 3”(Python3を使うべきでない場合) というブログ記事を書きました。私はZedの功績にとても敬意を払っているし、彼の( Learn Python the Hard Way )というの手法は、 私の に非常に似ているので、私はいつも、 私の講座 を受講しようとしている人には予習するときに彼のを読むように伝え、講座を修了した後に練習を積みたい人には復習するときに読むように伝えています。 ですから、今回のPython 3に関するZedの記事が私には賛同できないものだったことは、とても残念でした。 説明しましょう。私の仕事の90%は、さまざまな大企業でのPython講師としての仕事です。幅広い背景に対応して、クラスは「プログラム未経験者のためのPython」や「Python入門」

    Python 3を使うべきでない場合(なんてない) | POSTD
  • 逆畳み込みネットワークによる顔の生成 | POSTD

    私の好きなディープラーニングの論文の1つが ディープラーニングにおける畳み込みネットワークを使ったイス、テーブル、車の生成 です。論旨はとても単純で、ネットワークに自分が描きたい物のパラメータを与えると、そのとおりにできあがるというものです。しかし、そこからは信じられないほど面白い結果が生じます。ネットワークに3D空間や自らが描く物体の構造についての概念を学習する能力があるようで、数値ではなく画像が生成されるので、ネットワークの”考え”方までもがよく分かる感じがします。 注釈: イスのモーフィング 少し前に Radboud表情データベース をたまたま見つけ、これと同じことが表情の生成や補間に適用できるのではないかと思いました。 結果を見て当に興奮しました! ネットワークアーキテクチャ この実装にあたって、先ほどのイスの論文から”1s-S-deep”モデルのバージョンを応用しました。このモ

    逆畳み込みネットワークによる顔の生成 | POSTD
    xiangze
    xiangze 2017/01/23
  • コードの半減期とテセウスの船 | POSTD

    プロジェクトが発展する際は、単純に新しいコードが古いコードの上に追加されているのでしょうか。もしくは、時間をかけて徐々に古いコードが新しいコードに置き換えられているのでしょうか。これを解明するために、手ごわい GitPython プロジェクトの助けを借りて、Gitプロジェクトを分析する 簡単なプログラム を構築してみました。履歴を年ごとに振り返り、 git blame を実行してみようと思ったのです(この処理を多少でも速くすることは簡単ではないと分かりました。しかし、ファイルのキャッシングを便宜的に含ませることや、変更された点を履歴から見つけること、 git diff を使って変更したファイルを無効にすることなどの詳細を、いつかお伝えします)。 頭がさえている時に、 テセウスの船 をダサくもじって、 “テセウスのGit” と名付けました。私は父親になって、ひどいダジャレを作れるようになった

    コードの半減期とテセウスの船 | POSTD
  • MITライセンスを1行1行読んでいく | POSTD

    全てのプログラマが理解すべき171語の文章 MITライセンス は、最も有名なオープンソースソフトウェアのライセンスです。この記事では、その内容を一行一行読んでいきます。 ライセンスを読む オープンソースソフトウェアを利用しているものの、これまでライセンス全文(原文:171語)を読む機会がなかった方は、大した量ではないので、今すぐ読んでください。あなたにとってライセンスが身近なものでないなら尚更です。理解できない箇所などがあれば、その部分は心に留めておき、明確にするようにしてください。これから背景や解説とともに、全文を分割して順番に紹介していきますが、大事なことは全容を頭に入れておくことです。 MITライセンス(MIT) Copyright (c) <年> <著作権保持者> ソフトウェアおよび関連文書ファイル(以下「ソフトウェア」)のコピーを入手する全ての人に対し、それらに関する無償のライ

    MITライセンスを1行1行読んでいく | POSTD
  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
  • グラフィックスプログラミングに泣かされる : OpenGLが抱える問題について | POSTD

    リアルタイムのグラフィックAPIのメインストリームであるOpenGLとDirect3Dは、プログラマが異なるハードウェアと相互にやりとりする方法としては恐らく最も広く利用されているものでしょう。しかし、これらの行うCPU-GPUインテグレーションの品質は到底受け入れがたいものです。良いパフォーマンスを実現するためには、CPU側のコードとGPU側のシェーダプログラムを緊密に調整する必要がありますが、今のAPIではCPUGPUは独立して実行するものとして扱われています。そのため、文字列型のインターフェイスや大量のボイラープレート、貧しいGPU固有のプログラミング言語が存在することになってしまうのです。 この投稿では、必ずしも愉快とは思えないOpenGLアプリの些細な現実をいくつかお見せします。 プログラムリスト や 全ソースコード を参照しながらお読みください。 シェーダは文字列 3Dでオブ

    グラフィックスプログラミングに泣かされる : OpenGLが抱える問題について | POSTD
  • Word2Vecを用いた研究 : ベクトル空間での操作で、単語から「ジェンダーの2元性」を排除する | POSTD

    前回の投稿では、言語のword embeddingモデル(WEM)という新しいモデルの概要を説明し、基的なWEM操作が簡単に実行できるR言語のパッケージを紹介しました。 この記事はほとんど、デジタルヒューマニティーズのコミュニティの皆さん向けに書きました。稿では、ratemyprofessors.comの教職員メンバーによる約1,400万のレビューを使ってトレーニングした1つのword2vecモデルについて、詳しく説明します。 ^(1) このモデルの注目点は、ジェンダー(性別)を示す言葉について分析する際に、こうした機械学習のモデルがどこまで役立つのかについて、具体的な研究ができるということです。この記事で、機械学習のモデルのトレーニングには興味のない方の関心も引くことができればうれしいと、私は思っています。コードを多少提示しますが、読み飛ばしてくださって構いません。 では前回の投稿を

    Word2Vecを用いた研究 : ベクトル空間での操作で、単語から「ジェンダーの2元性」を排除する | POSTD
    xiangze
    xiangze 2015/12/01
  • マジックカーネル – 画像のリサンプリングのメソッド | POSTD

    マジックカーネルとは? “マジックカーネル”とは、極めて高速で(一番単純なバージョンなら、必要なのは少しの整数加算とビットシフトのみです)、驚くほどの結果を出してくれる効果的な画像のリサンプリングのメソッドです(エイリアシングノイズやリンギング、細かい物体の”Width beat”の発生を防ぎます)。 私がこのマジックカーネルと出会ったのは2006年、一般的に使われているJPEGライブラリのソースコードを扱っていた時のことです。それ以来、この素晴らしい特性を深く探り、任意のリサンプリングファクタのケースにまでこのメソッドを広げました。 このWebページでは、それらの特性を要約して説明し、画像への適用も含めてマジックカーネルのC#のコード実装の全てをご紹介します。 マジックカーネルはどこから来たのか 2006年に私は、JPEGを過剰に圧縮すると発生するブロックノイズを最小限に抑えるいい方法は

    マジックカーネル – 画像のリサンプリングのメソッド | POSTD
  • 手続き型のダンジョン生成アルゴリズム | プログラミング | POSTD

    この投稿では、以前に TinyKeepDev が こちら で述べたランダムなダンジョンを生成する技法について説明しようと思います。元の投稿に比べて、もう少し具体的に話を進めるつもりです。まずは、以下に示したアルゴリズムの一般的な動作をご覧ください。 部屋の生成 はじめに、幅と高さを持つ部屋を円の中にランダムに配置しましょう。TKdevのアルゴリズムは、各部屋のサイズを生成するのに正規分布を用いています。これは一般的にとてもいいアイデアです。なぜかと言うと、これによってより多くのパラメータを扱うことができるようになるからです。幅/高さの平均と標準偏差間の異なる比率を選ぶと、通常は見た目の違うダンジョンとなります。 ここで実行すべき関数は getRandomPointInCircle です。 function getRandomPointInCircle(radius) local t = 2

    手続き型のダンジョン生成アルゴリズム | プログラミング | POSTD