Vim Tips

リンクを貼りまくる

インストール

catcher-in-the-tech.net

基本操作

vi・vim勉強中。 - vim UNDO(元に戻す)・REDO(元に戻したものを戻す)

vim-jp » Hack #57: 空行を挿入する

weble.org

h-miyako.hatenablog.com

blog.remora.cx

ファイラー

qiita.com

d.hatena.ne.jp

プログラミング

www.atmarkit.co.jp

gdb の使い方・デバッグ方法まとめ

vimでのデバッグにはgdb

Vim Script

プラグイン

結論;Shougoさんはすごすぎる。 qiita.com

Unite

kazuph.hateblo.jp

qiita.com

Amazon Web ServiceでMPI Cluster構築

MPIの基本

#include <mpi.h>
#include <stdio.h>
#include <string.h>

#define LENGTH 200
int main(int argc, char* argv[]){

  int my_rank;
  char message[LENGTH];
  int dest = 0;
  int tag = 0;

  // 初期化
  MPI_Init(&argc, &argv);

  // プロセス・ランク
  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

  if(my_rank!=0){ // 送信側

    sprintf(message, "Hello, my proc rank : %d", my_rank);
    MPI_Send( message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);

  }else{ // 受信側

    int proc_num;
    int source;
    MPI_Status recv_status;

    MPI_Comm_size(MPI_COMM_WORLD, &proc_num);

    for(source=1; source<proc_num; source++){
      MPI_Recv(message,LENGTH, MPI_CHAR, source, tag, MPI_COMM_WORLD, &recv_status);
      fprintf(stdout, "%s\n", message);
    }
  }
  MPI_Finalize();
}
⇒  mpirun -np 8 a.out
Hello, my proc rank : 1
Hello, my proc rank : 2
Hello, my proc rank : 3
Hello, my proc rank : 4
Hello, my proc rank : 5
Hello, my proc rank : 6
Hello, my proc rank : 7

参考

MPI

MPIでhelloを作成してみる.

http://h50146.www5.hp.com/solutions/hpc/stc/soft/pdfs/mpi_training.pdf

shuns.sblo.jp

starcluster

Launching an Amazon EC2 MPI Cluster · MPI Tutorial

Using the Cluster — StarCluster 0.93.3 documentation

Deep Q-Network まとめ

強化学習に関する良記事を見つけた。

qiita.com

元論文はこちら

NIPS [1312.5602] Playing Atari with Deep Reinforcement Learning

Nature Human-level control through deep reinforcement learning : Nature : Nature Publishing Group

以下自分なりの整理。

Q学習の枠組み

名前 意味
s(,o) 観測 環境に関してエージェントが得る情報
r 報酬 環境からエージェントが得る報酬
a 行動 エージェントが環境に対してとる行動
R_t (目的関数) 時刻tから無限の未来までに得る報酬の和(のようなもの)
 \pi(s) 方策 観測sに基づきエージェントがとる行動aを規定する関数
 \pi^*(s) 最適方策 最大化させる方策
Q(s, a) 行動価値関数 観測sで行動aを取った場合の目的関数R_t の期待値
Q^*(s, a) 最適行動価値関数 下記

 R_tの正確な定義は { \displaystyle
R_t = \sum \gamma^{k} r_{t+k+1}
}

この目的関数 R_tを最大化させる最適方策 \pi^*(s)を得ることが学習の目的。

方策を求める代わりに、行動価値関数 Q(s, a)という概念を導入する。

最適方策と最適行動価値関数の間には以下の関係が成り立つ

{ \displaystyle
\pi^{*}(s) = argmax_{a}Q^{*}(s, a)
}

学習は目的関数 R_tを最大化させる最適価値関数 Q^*(s, a)を得る事と等価。

学習の更新式

観測sに続く行動aの次のステップの観測s'、行動a'をもとに、Q(s, a)を更新する。

{ \displaystyle
Q(s, a) \gets Q(s, a) + \alpha ( r + \gamma \max_{a'}Q(s', a')  - Q(s, a) )
}

つまり学習率\alphaで、r + \gamma \max_{a'}Q(s', a')に近づけていく。

価値関数Q(s, a)をパラメータ\thetaの関数で近似した場合、勾配によるパラメータの更新式は

{ \displaystyle
\theta \gets \theta + \alpha ( r + \gamma \max_{a'}Q(s', a')  - Q(s, a) ) \nabla Q
}

Neural networkの応用

価値関数をNNで近似。原理的には誤差逆伝搬で上記勾配法を適用すればよいが、学習速度を向上させるためには工夫が必要。

以下のアルゴリズムが提唱されてきたらしい。

  • Experience Replay

エージェントが経験したサンプル (s, a, r, s′)を全て(あるいは有限の時間数ぶん)記録しておき、一度つかったサンプルを上記の関数近似を用いたQ学習で何度も利用するという手法

つまり再利用という事?

  • Neural Fitted Q Iteration

まずサンプル (s, a, r, s′)からなる十分な数のデータがあるものとして、「これ以上サンプルを追加せず、与えられたデータから最適方策を学習する」、すなわちバッチ強化学習を行うことを考えるアルゴリズム

NNの学習としてみれば、ただのミニバッチ学習?SGDに近い。

  • Growing Batch

ある程度学習を行った後にエージェントを環境中で動かし、バッチのデータを後から追加していく

強化学習、という条件が付いているために名前が付いているが、NNの学習という意味では特別は事はやっていなさそう。

Nature論文のアルゴリズムはNeural Fitted Q Iteration + Growing Batch。詳細は論文のアルゴリズム参照。

2016年の目標

あけましておめでとうございます。

今回の帰省ではあらためて家族のありがたみを感じた。しっかりと生きていかなければ。 尊敬するaidiaryさんにならい、自分も目標を立ててみる。

博士研究

博士課程の前半はいろいろな活動に色気を出し、博士研究は正直60〜70%位のペースで進めていた。 今年からは90%は博士研究に捧げる。残り10%は進路。

テーマは「シミュレーションと機械学習による除細動治療戦略の探索と実験的検証」

1年で以下をやりきる。

投稿計画

その他

最後に今年の標語

「シンカ」

  • 専門性を「深化」させ
  • 能力の「真価」を発揮し
  • 新たな自分に「進化」する

Bidomainモデル構築 - 心筋細胞モデル

 

心臓のフィジオーム―電気生理現象のシミュレーション 分子から臓器まで

心臓のフィジオーム―電気生理現象のシミュレーション 分子から臓器まで

心筋細胞モデルとは

心臓を構成する心筋細胞は、電気的興奮が細胞間を伝播することで駆動されています。そのメカニズムには細胞膜上にあるイオンチャネルが関与しており、その挙動を数学的モデルで説明したのが有名なHodgkin-Huxleyモデルです。

静止電位

細胞が興奮していない状態では、細胞内の電位は細胞外よりも低い状態(静止電位)に保たれています。これは細胞内の陽イオンを汲み出すイオンポンプの働きによるもので、細胞内外で各種のイオンの濃度差を生み出しています(分極)。この細胞内外の電位差を膜電位と呼びます。

つまり細胞外の陽イオンは細胞内に流入しようとしている状態なわけですが、静止状態ではイオンチャネルが閉じているために流入は起こらず、静止膜電位が保たれます。心筋の静止膜電位は約-80mV程度です。

脱分極と再分極

イオンチャネルは膜電位によって挙動が変化する性質があります。このイオンチャネルを開くトリガとなるのが外部電流です。細胞の外部から細胞に流れる電流によって膜電位が変化し、細胞内外の電位差が僅かにでも小さくなると、イオンチャネルが開き始めます。まずはNa+のチャネルが開き、Na+が細胞内に流入します。これは細胞内への内向き電流なので、膜電位は上昇し、マイナスが0に近づきます。するとその電位変化がトリガとなり、他のイオンチャネルも次々と開くことになります。ドミノのように連鎖的にイオンチャネルが開いて陽イオンが一気に細胞内に流入することで、細胞内外の電位差がなくなります(脱分極)。脱分極が起こると今度は外向きにイオンを流すイオンチャネルやイオンポンプが活性化しはじめて、最終的にはもとの静止電位状態にもどります。(再分極)

いやはや、うまく出来ていますね。

HH方程式

膜電位により変化するイオンチャネルの透過特性を数理モデルで表したものがHH(Hodgkin-Hulxley)方程式です。