研究者の卵の卵

決して頭がいいとは言えない大学生が、日々おもったことや学んだことをつらつら書きます。人工知能や脳科学の話が多くなりそうです。

Computational Neuroscience : Week2 を終えて

はじめに

少し遅ればせてしまいましたが、Week2を終えました。
実は、本格的にCourseraのコースを受講するのは初めてで、 このコースの本格性にかなり驚いたので、それも含めてまとめてみようと思います。

内容

Week1ではComputational Neuroscienceという学問分野がどのようなものなのかを軽く紹介するような内容だったので、週末の課題提出はありませんでした。
なので、かなり余裕をもってWeek2を始められるはずだったのですが、余裕がありすぎて逆に始めるのが遅れてしまいました。
追い打ちをかけるように、高専の方でも定期テストが近づいてきたり部活の引退試合があったりで、なかなかキャッチアップできませんでした。

Neural Encodingの簡単なモデル

Week2の内容は、Neural Encodingという手法についてでした。
手法の目的を、「ニューロンに与えられる刺激を基に、ニューロンが発火する確率分布を求めること」とし、そのために必要なアプローチを数学的に解説するというものでした。
最初に、与えられる刺激と発火確率分布の関係を定量化するためのモデルがいくつか紹介されました。
刺激関数を単純に定数倍したものや、何らかの「フィルタ関数」みたいなものを畳み込んだものなどが有効なようです。
さらにそこから、刺激関数を、時間軸だけでなく空間軸も持つものに拡張して視覚系における計算についても軽く解説していました。

フィルタ関数の決定

続いて、"じゃあそのフィルタ関数ってどうやって同定するねん!?"という話題に入っていきました。
ここでのフィルタ関数っていうのは、CNNにおける特徴フィルタと同じで、ニューロンが反応しやすい刺激の特徴を示すものなのです。
すなわち、フィルタ関数が決定できれば、それがそのままニューロンを発火させる信号になるわけです。

入力と発火の関係に手掛かりがない状態なので、入力としてガウス分布に基づいたホワイトノイズ信号を与えるという前提でいろいろ議論していました。
いちばんちゃんと解説していたのは、「Spike-triggered average」という方法で、アプローチはかなり簡単なものでした。
そのほかにも、多次元の刺激空間上で、ニューロンを発火させた刺激ベクトルがどういうグループを成しているのかを線形代数的に求めるアプローチや、
発火した場合としてない場合で、刺激関数の確率分布のKullback-Leibler距離が最大になるようにするという確率論的なアプローチでフィルタ関数を同定する方法も紹介されました。

課題提出

本当は、課題の提出期限は日本時間で月曜日の午前中だったのですが、
その日は前日から出かけていてずっと遊んでいたので、提出できませんでした。
ただ、週末のテスト提出は期限に間に合わなくてもペナルティはなく、最終的にコースが終了する日までにすべての課題を提出できればいいので、割とあっけらかんでした。

課題の内容は、授業内容の理解度を確認する選択形式の問題が2問ほどと、
PythonまたはMatlabを使って、与えられたデータセットからspike-triggered averageを求める問題でした。
具体的には、Pickle形式で、インデックスを時間軸にとった、ホワイトノイズの刺激のリストと発火したか否かのバイナリリストが渡されるので、
そのデータをPythonでいろいろいじって、spike-triggered averageを求めました。
それから最後に、なんか2問ぐらいありましたが、よく覚えていませんw

そこまで難易度は高くなかったです。
最後の2問で間違えてしまい、最終的には90%正答でしたが、80%以上正答していれば課題はクリアなので、とりあえずこれでWeek2は修了となります。

あと6週間ぐらい残ってますが、気長に頑張ってマスターしていきたいと思います。