医mportブログ

雑記っき

純学習とゲノム情報との関係を人工神経回路から見るという論文を読んだ

こんにちは、コロナ騒動による自粛ムードで暇なのでなんかおもしろい論文でもないかなと探していたところ、nature communicationsで2019年に投稿されたこんな論文があったので読んでまとめて感想書いてみます。流し読みなので細かいところはスルーです


www.nature.com



ANN(artificial neural network)という名前が示すように、動物、特に人間の知能に近い神経回路システムを構築するという試みでありますが、実際の動物は学習と生来持っている遺伝情報に大きく依存しており、ここの世代間のゲノム情報に刷り込む獲得機能はどのようなメカニズムなのかということをテーマにしてます。

ANNと人間が生来持っている情報の違いがわかりやすいのがこの論文中のFigureで、2,4,6,8,と数字を並べていって次にくる数字は?と尋ねられたら10と答えるのが人間ですが、ヘタに重回帰分析をしてしまうとデータ数が少ないのもありますが線形と捉えなくなります。こういうので、生得的な補完機能があるのではないかということを示唆しています。
f:id:doinakadoctor:20200327172835p:plain



学習は動物の経験によるもので、情報に重み付けしてヘブ則に従って情報受容後選択的に学習してます。


しかしすべての事象をゲノムに刻めるわけでもなく情報のボトルネックが生じてしまう上、特に人間のゲノムサイズは魚類の40分の1となっており、生誕後学習に寄与する部分が生物平均から見ても大きいと見受けられます。

実際人間の赤ん坊は生誕後すぐに独り立ちできないが、鹿の赤ん坊なんかはすぐ立ち上がって歩けるところからも納得できますね。



学習するにもさらに制約条件(それが生きる上で有利か)がありこれはメタ学習とか機械学習で言われるところの帰納バイアスが似たようなもので、これによってスムーズな学習が実現できるようです。しかもそれがゲノム情報に寄与するところが大きく、学習過程が教師なし学習に見えて実はみえないところで教師あり学習ではないかとささやかれています。


そのような制約があれど、やはり人間は他の動物に比べて学習の自由度が高くて、おそらく哺乳類で生後一番弱いのは人間なんですけど(立つこともままならないので)裏を返せば自ら学習すべきメモリ容量がだいぶ残されてるということであり、指数関数的に、そして漸近がかなりあとで来るのは後々有利ということなのでしょう。



という以上の知見からも、ただ単にデータ量を増やす、ただ単に素子とノード、層の羅列で人間の脳が再現できるかというと全くそうではなく、ゲノム情報も含めて再現していく必要がありそうだとわかります(それはそう)。しかし情報を根回しするのにも神経回路が必要なので、ゲノム情報から形成されてる神経回路と生誕後の純学習で形成される神経回路でまた毛色が違うのでは?と思ってるのでそのへん詳しいのがないかサーベイしてみたいです。

脳の計算論を読んで勉強が必要だと思った分野をまとめてみた

久しぶりの更新となります。

正月に入った臨時収入()により購入した「脳の計算論(甘利俊一監修)」を一通り読み終わったので、その上で今の自分になにが必要なのかまとめ上げようと思い立ちました。


まずこの本一回通して読んだだけでは深淵まで理解することはできないと踏みましたね笑 もともと甘利先生が天才すぎて彼の著書は軒並み激ムズと評判でしたが、、、


なんとなく言ってること、向かってる先はわかったけどもそのプロセスを理解したいといった場合にどういった事前知識が必要であったかを書き綴ります。


ただし、基本的な線形代数だったり大学教養で学んであろうものは身についてることを前提とします。

羅列になってしまいますが、、


第1章は総論だから飛ばして、、


第2章 ニューロンシナプスの数学的モデル

・ホジキンハクスレイモデル
・双安定ニューロンモデル
・Izhikevichモデル

第3章 リズム活動と位相応答

・位相縮約法
・位相応答関数
・随伴方程式
・Stuart-Landau方程式
・サドルノード分岐
・フォッカープランク方程式
・線形安定解析
・中心多様体定理

第4章 神経ダイナミクスと確率過程

・ガウシアンノイズ
・キュムラント
・ランジュバン方程式
・確率偏微分方程式
・ウィンドウ関数
・自己組織化
・シンファイアチェイン

第5章 意思決定とその学習理論

・符号化理論
・フィッシャー情報量
ベイズ理論
・情報幾何学
・カルマンフィルター
・レスコラワグナー学習則
・TD学習
マルコフ決定過程
・ベルマン方程式

第6章 スパイクの確率論

ベイズ推定
・MAP推定
・PM推定
・離散フーリエ変換

第7章 スパイクニューロンの回路モデルと認知機能

特になし


以上、箇条書きになりましたがけっこう深掘りして理解しなきゃなという要素だらけです、でもどれも面白そうですしこれら身につけて医学部卒業できたらもうその時点でただの医師免許ホルダーにはならないんじゃないかな?(自己満)

ひとまず2020年に読みたい本まとめてみる(随時追記予定)

こんにちは、現在医学部3年でそろそろ4年に上がろうとしてます。
4年にはCBTがありますが、QBまわしてたまにmedu4観て無難にこなしていこうと思います、それでも時間は余ると思うのでそこは有効活用して書籍読むなりコード書く練習するなり研究室に配属させていただいたりしようかなと!


ひとまず、神経科学系と機械学習系で分けて少しずつ読み進めていきたいです。


[神経科学]

計算論的神経科学: 脳の運動制御・感覚処理機構の理論的理解へ

計算論的神経科学: 脳の運動制御・感覚処理機構の理論的理解へ

  • 作者:田中 宏和
  • 出版社/メーカー: 森北出版
  • 発売日: 2019/06/14
  • メディア: 単行本


言語と思考を生む脳 (シリーズ脳科学 3)

言語と思考を生む脳 (シリーズ脳科学 3)


脳の計算論(シリーズ脳科学 1)

脳の計算論(シリーズ脳科学 1)


[機械学習]

パターン認識と機械学習 上

パターン認識と機械学習 上


ガウス過程と機械学習 (機械学習プロフェッショナルシリーズ)

ガウス過程と機械学習 (機械学習プロフェッショナルシリーズ)


機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

  • 作者:須山 敦志
  • 出版社/メーカー: 講談社
  • 発売日: 2017/10/21
  • メディア: 単行本(ソフトカバー)

生命情報処理における機械学習 読んだ感想その1

こんにちは。
今回はお年玉をはたいて購入した書籍について軽く感想や要点をまとめていきたいと思います。
↓こちらの本ですね。


まず第1章は包括的な生命科学に関する説明が書かれてました。医学部では基礎医学の段階で習得するDNA、RNAの転写翻訳、また修飾のためのシスエレメントについてざっと述べてる感じです。
理工学系で生命科学初学、という方はここをじっくり読むといいと思われますが、正直医学部で基礎医学を経ている身ならば読み飛ばしてもかまわないです。



次に、第2章は多重検定と無限次数多重検定法について。
Mann-WhitneyU検定とt検定は独立2郡の差を検定するときに用いること、さらに母集団が正規分布に従わない際はMann-WhitneyU検定を採用するということを強調してます。
あとは統計量の近似が難しい場合はモンテカルロといった具合に、問題が生じたらこの手法、次はこの手法と説明してくれてわかりやすかったです。教養レベルの統計学の知識では知らないことも書いてありました、勉強になりましたね。


次に、GWASでは多数の検定が同時に発生するので帰無仮説に従っていても偽陽性が出現する確率の高まりを問題提起とし、有意水準の補正をBonferroni法,Tarone法を用いて説明してますが厳密な証明をしており割と長々としているので軽く斜め読みでいいと思います笑


殊、ゲノミクス解析の場合染色体上の塩基配列は鎖状はので近い同士にある変異郡は独立でなく従属性が強いため偽陰性率が高まります(ハプロタイプブロックというらしい)、その解決策が羅列されてました、ここでもモンテカルロに準じた多重検定補正が採用されてました。


M個の検定対象があったら2^M-1個の仮説を考えなければならないわけですが、無限次数多重検定法で頻出パターン解析をすれば計算量を効率化できるという記載もありました。補正後の有意水準δに対して変異の各要素の集合パターンの中で最小のP値が下回ったものだけを採用する方法ですね。


一般に遺伝子のゲノム網羅的な発現量の観測における話で、投薬前後で規定回数の発現量観測を行った上で前後間で帰無仮説、特にRNA-seqの場合は過分散発現なので二項分布を採用するようです。やはりここでも多重検定における補正をするのですがあまり厳しい評価の帰無仮説を採用しないほうがいいらしいですね(FWERよかFDR)


GOタームの説明はよくわかりませんでした笑 GO タームの中には色々遺伝子機能に関連した単語があってそれに結びつく遺伝子郡と、着目した検定対象の遺伝子郡と独立かどうかの帰無仮説を調べることによって遺伝子機能の共通性をみつける、、??ほぼスルーしました、


ひとまず、ここまで読んだ感想としては多重検定に対して行われる補正を紹介してもらってるな〜というざっくりとした感想笑 fMRIやPETでも調査するボクセルの多重性から補正せざるを得ないようなのでそのあたりの知識は今後肝に銘じなければなと思いました。


後半は推定問題が主なようです、がんばって読み進めます!

SARIMAXで株価予測してみた

こんにちは。
株価って一概にグラフ理論だけじゃ未来予測できないだろうな、、と思いつつ敢えて今回は挑戦してみました。




SARIMAXは、パラメータがorder =(p,d,q)、seasonal_order = (P,D,Q,s)があり、pは自己回帰係数、qは移動平均係数(厳密にはどちらも次数)とdは差分の距離です。
数2の数列を思い出しますね、等差数列ってd使ってましたよね。





そして、時系列データは自然要因による季節に特有の変化と、社会的慣習や制度による季節 変化を含んでいます。夏にはエアコンが売れたり、ボーナス時期には売り上げが増えたりすることはよく知られていますね。これらの季節要因を考慮して調整を入れるものを季節調整と言います。P,D,Qは季節調整を入れたp,d,qの値で、sは季節調整の周期を決定する要素です。
p,d,qは0から2、P,D,Qは0か1がいいようです。
だいたい1年ごとに周期があるのでsは12が通常なようです。




自己回帰モデルは時点 t におけるモデル出力が時点 t 以前のモデル出力に依存する確率過程で、移動平均モデルは将来の予測値は過去の予測値と実績値との誤差により決まるとしたときの分析対象予測過程です。これらを組み合わせたのがARMA、季節調整を入れたものがSARIMAXとなります。


数学的な説明は省きましたが、さらに数式から理解したい方はこのサイトを参考にするとよいでしょう。
to-kei.net


今回はstatsmodelsというライブラリを主に用いるのでpip installを済ませておく必要があります。

import pandas as pd
import numpy as np
import io
from statsmodels import api as sm
from datetime import datetime
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.arima_model import ARIMA
import warnings
import itertools

次に、株価のcsvファイルをダウンロードしてきます。
こちらのサイトから引っ張ってきました。
欠損値処理をdropnaでおこないます。
kabuoji3.com

kabu_data = pd.read_csv("csv")
kabu_ = kabu_data.drop(columns = ["date","start","high","low","close","dekidaka","end"])
kabu_.dropna()

次に、ADF検定をします。
ADF検定とは、単位根過程(yt が非定常過程、また差分系列yt−yt−1=Δytが定常過程である時、ytは単位根過程である)に従うxt,yt を回帰分析を行うと、まったく関係のないxt,ytの間に有意な相関を見出してしまう「見せかけの回帰」が行われます。「見せかけの回帰」は、例えば株価と二酸化炭素濃度という関係のない2つの間に相関性を導き出してしまいます。

そのため時系列データに対して回帰分析を行う時は「見せかけの回帰」に気を付ける必要があります。

adf_result = sm.tsa.stattools.adfuller(kabu_data["ave"],autolag='AIC')
adf = pd.Series(adf_result[0:4], index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
print(adf)

結果はこちら
f:id:doinakadoctor:20200107164206p:plain

注目すべきはp値とAIC値で、単位根過程の帰無仮説を棄却できる範囲にp値があるのでok、一方でAIC値はちょっと大きめ。一桁台なら理想だけど。

あとは学習させてしばらく先を予測して見ます。

100個学習して100個先を予測、ですね。
forecast( )関数の引数に100を入れます。

N = 100

test = kabu_data.loc[:,'ave']
kabu = kabu_data.loc[:N,'ave']
print(kabu)

SARIMA_kabu = sm.tsa.statespace.SARIMAX(kabu.astype(float),order=(1,0,1),seasonal_order = (1,1,1,12), enforce_stationarity = False, enforce_invertibility = False,trend = "n").fit(trend='nc',disp=False)
print(SARIMA_kabu.summary())
pred = SARIMA_kabu.predict()
pred2 = SARIMA_kabu.forecast()


kabu_diff = kabu_.diff()
kabu_diff.index = kabu_data.index
kabu_diff = kabu_diff.dropna()

plt.plot(kabu_,color = "b")
plt.plot(pred,color = "r")
plt.plot(pred2,color="y")
plt.ylim([2000,3000])
plt.show()

結果はこちら。

f:id:doinakadoctor:20200107170322p:plain

青が元データ、赤が学習過程、黄色が予測です。

ぜんっぜんグラフの形似てませんね



次数をいじったりなんらかのパラメータを変えていく必要はありそうですね、、、とりあえず予測モデルとして理論上可能ということはわかりました。
もう少し外乱の少ないネタならSARIMAXは予測機能としては遜色ないのでしょう。

スクレイピングで手っ取り早く欲しい画像を集める

こんにちは、寝正月で元旦を消費してしまいました。
2日の今日はブログを書こうと心に決めました、、、



今回は、スクレイピング技術試してみようかなという記事です。
スクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のことです(Wikipediaより)



プログラミングを使った自動化技術のうちの一つですね、作業効率化にたいへん寄与してくれるはずです。



pythonを使ったコードですが、その前にいくつかライブラリをpipコマンドでインストールしておきましょう。



必要なものとしては、

bs4:BeautifulSoupと呼ばれるHTML や XML から狙ったデータを抽出するためのライブラリです。

requests : HTMLの取得に使います。

urlib : URL を扱う幾つかのモジュールを集めたパッケージです

argparse : 自動的にヘルプと使用方法メッセージを生成し、ユーザーが不正な引数をプログラムに指定したときにエラーを発生させます。

このくらいが新規にpipインストールすべきであろうライブラリで、他はデフォルトであるのではないかと思います。


さっそく必要なライブラリのimportです。

import bs4
import requests
import re
import urllib.request, urllib.error
import os
import argparse
import sys
import json


次に、BeautifulSoupを用いてURLを引っ張り出してきます。
そしてterminal上で -s:検索ワード(英字表記のみ) -n:数字で何枚取るか -o:自分のローカルのどこに保存するかのパス
を記載します(後述)

def get_soup(url,header):
    return bs4.BeautifulSoup(urllib.request.urlopen(urllib.request.Request(url,headers=header)),'html.parser')

def main(args):
    parser = argparse.ArgumentParser(description='Options for scraping Google images')
    parser.add_argument('-s', '--search', default='kensakuword', type=str, help='search term')
    parser.add_argument('-n', '--num_images', default=10, type=int, help='num of images to scrape')
    parser.add_argument('-o', '--directory', default=' 保存したい場所のパス', type=str, help='output directory')
    args = parser.parse_args()

    query = args.search.split()
    query = '+'.join(query)
    max_images = args.num_images

続いて、画像をフォルダでグルーピングします。

save_directory = args.directory + '/' + query
    if not os.path.exists(save_directory):
        os.makedirs(save_directory) 


そして最後にお決まりごとと画像を取得している様子がわかるようなコードを追加していきます。基本的にjpg形式で取得してます。

url="https://www.google.co.jp/search?q="+query+"&source=lnms&tbm=isch"
    header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"}
    soup = get_soup(url,header)
    ActualImages=[]

    for a in soup.find_all("div",{"class":"rg_meta"}):
        link , Type =json.loads(a.text)["ou"]  ,json.loads(a.text)["ity"]
        ActualImages.append((link,Type))
    for i , (img , Type) in enumerate( ActualImages[0:max_images]):
        try:
            Type = Type if len(Type) > 0 else 'jpg'
            print("Downloading image {} ({}), type is {}".format(i, img, Type))
            raw_img = urllib.request.urlopen(img).read()
            f = open(os.path.join(save_directory , "img_"+str(i)+"."+Type), 'wb')
            f.write(raw_img)
            f.close()
        except Exception as e:
            print ("could not load : "+img)
            print (e)

if __name__ == '__main__':
    from sys import argv
    try:
        main(argv)
    except KeyboardInterrupt:
        pass
    sys.exit()

上記のコードにて、私はこのように検索しました、ちょうど壁紙欲しかったので、、、

f:id:doinakadoctor:20200102164727p:plain

取得画面はこんな具合

f:id:doinakadoctor:20200102164801p:plain

そして、自分の保存したいローカルにはこのように自動的に画像が保存されていきました。

f:id:doinakadoctor:20200102164843p:plain

以上、スクレイピングを一通り経験してみたと言った感じです。
単純に楽なのと、ちょっと深層学習いろいろテストしたいなという野望があるので学習データ画像取ってくるにはもってこいの技術ですよね。
論文検索でキーワードからURLのみ引っ張ってくる、などにも応用できそうです。

家でラーメン二郎つくった-どん二郎-

こんにちは。

今回は地方でなかなか話題の本場のラーメン二郎に有り付けない人必見の自作ラーメン二郎の記事です!


あの中毒性のあるラーメン、体が欲しても店舗まで遠いし家でできないかなーと思い調べて実際に作ってみました!


まずは材料


どん兵衛(うどん)1つ
キャベツ お好みで
もやし お好みで
チャーシュー 市販のひとつ
牛脂 1つ


f:id:doinakadoctor:20190903085208j:plain


せっかく自分で二郎作るんだから、お好みでええねん!


特に牛脂が二郎っぽくするのには必須らしい、ほう。
牛脂は業務用スーパーなどにいけば無料でもらえるし、お肉コーナーに涼しい顔して鎮座してたりするので手に入りやすいですよ


もやしとキャベツを茹でて、その熱湯でをどん兵衛に注ぎ待つこと3分。
牛脂も同時に入れておきます。

所要時間10分から15分ほどで完成!


f:id:doinakadoctor:20190903085814j:plain


見た目なんとなく二郎だ


さっそく実食!


一口めは二郎っぽさがちゃんとでてました、牛脂パワーか


麺もわりかし二郎に近い気がする、合格点


しかし問題がひとつ


味うっっっっす


これ醤油とかいれるべきでしたね、二郎でいうからめってやつですね


しかし材料費は200~300円で済みますし、待ち時間もさほどでもなし、利点はたくさんあります。
もっと本格化したいなら背脂を手に入れて野菜マシアブラマシが実現できるような準備をするといいんじゃないかな


以上、お手軽二郎でした!