2015年7月20日月曜日

Deep Learning のフレームワーク Chainer を使った画像分類 その2

入力データの構造

six パッケージ

前回、Deep Learning のフレームワーク Chainer を使った画像分類その1にてインストールしたパッケージ、sixとは何だったのか。train_mnist.py 内にてファイル mnist.pkl の読み込みに使われていたので調査。結論としては six は Python 2 と Python 3 の違いを吸収するユーティリティ。恐らく 2 と 3 を乗算して six (推測)。

データフォーマット

ファイル mnist.pkl は下記のように読み込まれている(train_mnist.py 30行目)。

mnist = six.moves.cPickle.load(mnist_pickle)

PickleはPythonオブジェクトのシリアライズを行うモジュールで、cPickleはC言語でそれが実装された高速版

なお、MNISTとはアメリカ国立標準技術研究所が提供するデータを元に作られた手書き数字のデータベース。(→配布元)

多層パーセプトロンの作成

(train_mnist.py 43-45行目)

# Prepare multi-layer perceptron model
model = chainer.FunctionSet(l1=F.Linear(784, n_units),
                            l2=F.Linear(n_units, n_units),
                            l3=F.Linear(n_units, 10))

Chainerが提供するLinear関数は数式

(行列Wとベクトルbはパラメータ)を示す。
ニューラルネットワークのうち、「最も基本的かつ最もよく使われている」順伝播型ネットワーク(=多層パーセプトロン)において、ある層のあるユニットの入力をx1〜x4とすると、このユニットが受け取る受け取る総入力uは
u = w1x1+w2x2+w3x3+w4x4+b
と表される1。wは重み(weight)とよばれ、各入力に異なる重みづけがなされる。これにバイアスbを足したものが総入力1。第1層のユニットをi=1,...,I、第2層のユニットをj=1,...,Jで表すと、第1層のユニットの出力xと第2層のユニットの入力uは、ベクトルと行列を用いて表記すると

この時、

2
Liner関数はデフォルトの挙動ではWはランダムに初期化されるが、bはゼロで初期化される。またLiner関数の第一引数は入力ベクトルの次元数、第二引数は出力ベクトルの次元数。

Chainerが提供するFunctionSet関数は、複数のパラメータ化された関数の管理を行う。この関数は単純なオブジェクトの様に振るまい、指定されたキーワード引数は下記のようにそのオブジェクトの属性となる。

model = FunctionSet(
  l1 = F.Linear(4, 3),
  l2 = F.Linear(3, 2))
model.l1
// <chainer.functions.linear.Linear object at..>

以上より、下記の形のネットワークが形成された。


次回、Optimizerとドロップアウト、交差エントロピーをはじめとする伝搬手順の定義。→Deep Learning のフレームワーク Chainer を使った画像分類 その3

1参考: 岡谷2015 p.7-8, 2参考: 岡谷2015 p.9

参考書籍

  • 岡谷貴之(2015)『深層学習 』(機械学習プロフェッショナルシリーズ)講談社

2015年7月18日土曜日

C言語における局所変数とグローバル変数の確保過程

きっかけ

C言語にて構造体を新規作成し返却する関数を書いてた際、malloc関数で領域を確保する必要があると聞いた。もし確保しなければ、戻り先でこの関数が作成した構造体が使えないとのこと。
例:
struct str1 func1(void)
{
  struct str1 target;
  memset(&target, 0 sizeof(str1));
  target.member = 1;
  return target;
}

int main(void)
{
  struct str1 retval = func1();
  // str1 は使えない
}
参照さえあれば変数が生き延びるJavaと大分勝手が違う。また「〜と聞いた」と濁してるのは、私がC言語の言語仕様の当たり方に慣れていないため。C99 にあたる JISX3010 は探し当てることができたが、いずれ「どの言語仕様」が理由で「malloc関数で領域を確保する必要がある」と言い切りたい。

2015年7月5日日曜日

デフォルト・モード・ネットワーク (Default Mode Network)

この記事は、クリエイティブ・コモンズ・表示・継承ライセンス3.0のもとで公表されたWIKIPEDIAの項目"Default Mode Network" 15:43, 15 May 2015‎版 の一部を邦訳し二次利用しています。この記事の著作権も同ライセンスを継承しますが、明示的、暗示的問わず内容に関するいかなる保証もありません


神経科学において、デフォルト・モード・ネットワーク(以下DMN)とは個人が外界に注意を払っていなく、かつその脳がウェイクフルな休憩にある時に活性化される脳の領域。デフォルト・ネットワーク、デフォルト・ステート・ネットワーク、タスク・ネガティブ・ネットワークとも呼ばれるDMNは、0.1Hz以下のコヒーレントな神経振動によって特徴付けられる。目標志向的な活動中、DMNは非活性化され、タスク・ポジティブ・ネットワーク(以下TPN)と呼ばれる別のネットワークが活性化される。DMNはタスクから独立した内観あるいは自己言及的な思考に相当し、一方でTPNは行動に相当する可能性がある。ゆえにDMNとTPNは「反相関関係にあるコンポーネントをもった一つのデフォルト・ネットワークの要素群と考えられる」可能性がある。

解剖学

DMNは相互に結ばれ、かつ解剖学的に次のように定義される脳のシステム: 個人が白昼夢そして未来の予測、記憶の想起、他者の視点の推測のような、内省的なタスク取り組む時に優先して活性化される―。DFNは外界の視覚的な信号に注意を向ける脳のシステムと負の相関関係にある。DFNは記憶のために内側側頭葉の一部を、心の理論のために内側前頭前皮質の一部を、統御のために後帯状皮質を、隣接する腹側楔前部と内側、外側、下頭頂葉皮質と共に利用する。構造的そして機能的な接続性でDFNは極めて高い一致を示しているとみられており、これは脳の構造的な基本的設計は、この特定のネットワークが他の精神的な活動が処理されてない限り通常状態で活性化されるという様な方針の上に成り立っていることを示唆している。幼児の脳においてはこのデフォルトネットワークの証拠は限定的だが、デフォルトネットワークの接続性は9歳~12歳では強固となり、デフォルトネットワークは発達にともなう変化を行うことが示されている。

機能

DMNの機能ははっきりしていない。しかしこのネットワークの活動は、注意や遂行機能に使用される領域の活動と負の相関関係がある。ヒトにおいてはこのDMNは心が散漫としている(mind-wandering)時の自発的な思考を創出すると仮説付けられ、また想像力に関連する可能性がある。一方で、デフォルトモードの活動は特定のどの思考にも結びつかない、脳内をゆく潜在的な生理学上の過程を示しているかもしれない。

病態生理学

DMNはアルツハイマー病、自閉症、統合失調症、うつ、慢性疼痛などの病気と関連すると仮説付けられている。特に、認識的に困難な課題におけるDMNの非活性化の失敗は自閉症に、活動過剰時の失敗は統合失調症に関連付けられている。アルツハイマー病ではこのデフォルト・ネットワークはアミロイドβの生成によって優先的に破壊される。児童虐待等の長期のトラウマを経験した人においては、このデフォルト・ネットワークの低い接続性が発見されている。PTSDを経験した人の間では後部帯状回において、活性度の低調がみられた。このデフォルト・ネットワークの過剰な結合はうつ病の反芻思考と慢性疼痛に結び付けられている。

批判

「デフォルト・ネットワーク」の考えは例外なく受け入れられているわけではない。特定の「困難な」課題を行っている脳よりも休んでいる脳がより処理していることに対するより単純な仮説があるということ、また休んでいる脳の活動と本質的な違いがないという理由から脳の機能を理解するにあたり、このデフォルト・モードのコンセプトは有用ではないという批判が2007年になされた。

更新履歴

更改内容 更改日付(JST) 更改内容
1 新規作成 2015年7月5日 新規作成
2 更新 2015年7月6日 demanding taskの訳を修正

2015年7月4日土曜日

神経科学・脳科学・心理学略語集

学習の過程で登場した用語を整理するためまとめてます。

部位

省略形 原形 日本語 簡単な説明
IPS Intraparietal Sulcus 頭頂間溝(とうちょうかんこう) Wikipedia
FEF Frontal Eye Fields 前頭眼野 サッケード運動の発生に関与する
MT area (Middle Temporal lobe: 中側頭葉, ※MT野はマカクザルの中側頭葉内に存在することに由来する領野) MT野 =V5野. 対象物の動きの視覚処理を行っていると考えられる。
MT+ MT complex MT+野 MTとMT+の違いについては The Rokers Vision Laboratory at the University of Wisconsin - Madison 内記述より推測
MPF Medial Prefrontal Cortex 内側前頭前野(ないそくぜんとうぜんや) MPF - Wikipedia
PCC Posterior Cingulate Cortex 後帯状皮質(こうたいじょうひしつ) Wikipedia
LP Lateral Preoptic nucleus? 外側視索前核? LP = Lateral Proptic area? Preoptic Area 視索前核を含む視床下部
SMA Supplementary motor area 補足運動野 Supplementary motor area - Wikipedia 大脳基底核の神経回路網
RLPFC Rostrolateral prefrontal cortex 吻側外側(ふんそくがいそく)の前頭前野皮質 関連記事:
Neural Taskmaster: How the Rostrolateral Prefrontal Cortex Keeps Us on Task
SC Superior colliculus 上丘 関連記事:
How Judgment of Sensory Simultaneity May Develop in the Brain

物質

省略形 原形 日本語 簡単な説明
CSF Cerebrospinal Fluid 脳脊髄液(のうせきずいえき) カラー版 ベアー コノーズ パラディーソ 神経科学―脳の探求 初版 p.139
BDNF Brain-derived Neurotrophic Factor 脳由来神経栄養因子 Wikipedia
関連記事:
Mice on Wheels Show How Exercise Benefits the Brain
DBHB Beta-hydroxybutyrate βヒドロキシ酪酸メチル 腎臓内で作られBDNF遺伝子を活性化させる。Wikipedia
関連記事:
Mice on Wheels Show How Exercise Benefits the Brain
HDAC Histone Deacetylase Complexes DBHBは、「HDACがBDNF遺伝子環境を変化させBDNFの生成を抑制し」ない様にすると主張されている

機能

省略形 原形 日本語 簡単な説明
DMN Default Mode Network デフォルト・モード・ネットワーク
TPN Task Positive Network タスク・ポジティブ・ネットワーク

関連部位

関連物質

関連機能

2015年7月1日水曜日

Deep Learning のフレームワーク Chainer を使った画像分類 その1

Chainerについては下記

環境

  • Mac OSX 10.7.5
  • Chainer 1.0.1

セットアップからサンプルコード挙動確認まで

$ sudo pip install virtualenv
$ virtualenv .
$ source bin/activate

$ # Pythonの参照先が書き換わる事を確認
$ which python
~/Documents/chainer_workspace/bin/python
# Pythonのバージョン確認。Chainerで[必要とされるのは Python 2.7+](http://research.preferred.jp/2015/06/deep-learning-chainer/)
$ python --version
Python 2.7.1

$ # QUICK START (http://chainer.org/) を参考にChainerをインストール
$ pip install chainer
~~省略~~
Successfully built chainer
Installing collected packages: numpy, chainer
Successfully installed chainer-1.0.1 numpy-1.9.2

$ # サンプルコードの実行
$ git clone https://github.com/pfnet/chainer.git
$ python chainer/examples/mnist/train_mnist.py
Traceback (most recent call last):
  File "chainer/examples/mnist/train_mnist.py", line 11, in 
    import six
ImportError: No module named six

$ # とりあえず QUICK START で必要 (requires) と記載されたパッケージをインストール
$ pip install scikit-learn
~~省略~~
Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.16.1
$ pip install scipy
~~省略~~
Installing collected packages: scipy
Successfully installed scipy-0.15.1

$ python chainer/examples/mnist/train_mnist.py
Traceback (most recent call last):
  File "chainer/examples/mnist/train_mnist.py", line 11, in 
    import six
ImportError: No module named six

$ # フォーラムを探索。[Can't run the MNIST example](https://groups.google.com/forum/#!topic/chainer/pkIVsfPtL4c) それっぽいのを発見。sixというパッケージをインストールする必要があるよう。
$ pip install six
~~省略~~
Installing collected packages: six
Successfully installed six-1.9.0
$ python chainer/examples/mnist/train_mnist.py
load MNIST dataset
Traceback (most recent call last):
  File "chainer/examples/mnist/train_mnist.py", line 29, in 
    with open('mnist.pkl', 'rb') as mnist_pickle:
IOError: [Errno 2] No such file or directory: 'mnist.pkl

$ find . -name "mnist.pkl"
$ # mnist.pklは存在せず
$ ls chainer/examples/mnist/
README.md            train_mnist.py
download_convert.py        train_mnist_model_parallel.py
$ # download_convert.py がデータを取得するスクリプトと思われるので実行
$ cd chainer/examples/mnist/
$ python download_convert.py 
Downloading train-images-idx3-ubyte.gz...
Done
Downloading train-labels-idx1-ubyte.gz...
Done
Downloading t10k-images-idx3-ubyte.gz...
Done
Downloading t10k-labels-idx1-ubyte.gz...
Done
Converting training data...
Done
Converting test data...
Done
Save output...
Done
Convert completed
$ python train_mnist.py 
load MNIST dataset
('epoch', 1)
train mean loss=0.27741594178, accuracy=0.914916668298
test  mean loss=0.117256106085, accuracy=0.963500005007
('epoch', 2)
train mean loss=0.138578489823, accuracy=0.957850001852
test  mean loss=0.0929322862427, accuracy=0.970500005484
...
$ # 動いた

次回、train_mnist.py で行われていることの解析。→Deep Learning のフレームワーク Chainer を使った画像分類 その2