Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

6/28以降にやりたいことの展望 #117

Closed
ryought opened this issue Jun 23, 2022 · 6 comments
Closed

6/28以降にやりたいことの展望 #117

ryought opened this issue Jun 23, 2022 · 6 comments

Comments

@ryought
Copy link
Owner

ryought commented Jun 23, 2022

6/28まではオープンキャンパスの準備で色々と忙しい…それが終わったら下記のことに取り組みたい。

1. MCMC的な発想を導入してみる

モチベーション
最終的にMAP推定がうまくできたとしても、その推定量がどのぐらい信用できるかを知りたければ、(1)次点に良いものや(2)パラメーターの事後分布の分散を知りたくなる。

やること

  • MCMC的な発想:MAPを点推定するのではなく、事後確率に従ってdbgをsamplingすることを考える。MCMCについて学んで、そのような巨大な空間上から事後確率に従ってサンプルする方法を調べる。実際のデータだと真の事後確率を使うのは計算量的に厳しいかもしれない、例えばQ関数だけを使う、などをやっても良いかもしれない。
  • とりあえず全探索:小さい例題ならば、read dbgから行ける可能なdbgを全て探索することも可能なのではないか?ある固定したkについて、dbgを列挙する方法を探してみる。ゲノムサイズや何らかのtrue dbgとの距離指標(例えばアセンブリとしての編集距離など)をとって、いろいろな事前分布の重みに対してスコアをプロットする。read dbgやtrue dbgがどのあたりにいるかを探る。trueの次に良いdbgはどんなものかを探る

2. MMWCの探索を入れる

  • e+を使ってe-を使わないbellman-fordを使う方法を実装したい。これによって「無意味でないサイクルのうち平均重みが最小のもの」がきちんとわかることになる。
  • kが小さい時、dbgの確率はzero or non-zeroが一番効いてくるのではないか?とも思った。(例えばコピー数が若干真の値よりも小さくても、そこまで大きいペナルティは食らわない。) なので、Q(θ)を最小化する(その結果0/1の判定だけが残るとしても)のは結構本質的なのでは無いかと思った。

3. このモデルが有用な例を考える

このdbgの測り方が良いのだ!ということを示したい。この指標が一番良いdbgを探すことを目標にするべきだ!ということ。

@ryought ryought changed the title 展望 6/28以降にやりたいことの展望 Jun 25, 2022
@ryought ryought pinned this issue Jun 25, 2022
@ryought
Copy link
Owner Author

ryought commented Jun 29, 2022

セミナーまでに最低限やること

モデルが有用な場合だけに絞って論文を書く

サイクルを見つける、勾配法を実装する
bellman fordの改良版を実装する
色々なmock genomeを作って実験する

@ryought
Copy link
Owner Author

ryought commented Jun 30, 2022

話したいこと

  • 新しい変分近似のcompressionがどの程度良いか?
  • 総合的に(=com+ext)、どのぐらいの精度で復元できるか?ランダムに色々なゲノムを作って実験してみる。ゲノムの違いvs精度、みたいなグラフを
  • スコアの変化を可視化する

e2eのテストを作る。fuzzテストを実装する。

@ryought
Copy link
Owner Author

ryought commented Jul 2, 2022

緊急

  • 並列でテストできるようにする。結果をファイルに書き出す。
  • compareの結果を知りたい。read中のk-merのうち…というのを知りたい。

refactoring

  • Genomeを専用のstructに変更する。内側はStyledSeqのvec。genome_sizeをmethodとして計算できるようにする
  • DatasetをJSONでoutputできるようにする?
  • dbg中のfrom/into塩基列変換を完全にしておく。特にpathやcycle(つまりnode列)を塩基配列にする部分。塩基配列から、対応するnode列に変換する部分。さらに、cycleの時は始まりの位置に関して自由度があるので、適当な基準で固定したい。
  • 出力するファイルの形式を固定する。
  • sampling、Fulllengthの時のread_lengthは不要。Optionにするか、ReadTypeのFragmentedの中にread lengthを入れる。

parallel testing

色々なパラメーターを並列に計算したい。
ある関数を実行する。
サマリーファイルを出力する。
各パラメーターに対応するファイルも出力する。

出力は基本的にJSONにしたい
サマリーファイルは一行に1objectみたいなjson。
jsonの時と、普通に書き出す時を分けたい。

@ryought
Copy link
Owner Author

ryought commented Jul 7, 2022

7/7にやること

  • お試しでSchedulerを作ってみる
  • compression_v3とextensionを組み合わせてどうなるかをチェック(ログの出力を更新する)
  • compressionの様子を可視化する方法を作る。tandem repeatの時のdbgを可視化して、q関数の値を見れるようにする。

@ryought ryought unpinned this issue Jul 8, 2022
@ryought
Copy link
Owner Author

ryought commented Jul 8, 2022

7/8の報告で話す内容と準備

主題1: Q関数を偏微分して向上させる方法はあまりうまくいかない

やったこと

compression (k-merのdbgのlogP(R|G)+logP(G)の最大化) をEMアルゴリズムとして頑張って解く

  • Eステップは、HMMのBaum-Welchと同じように遷移・出力の使用率を計算する
  • Mステップは、求まるQ関数は例えばmin-flow等で厳密に最大化することはできない複雑な関数。そのため、変分近似のようなことをして、min-flowで近似的に解く。
    • 非凸cost関数のmin-cost-flowになる。負のサイクルが意味のない場合がある。2通りの解決策(1つは厳密、1つは近似的というか発見的)が準備できて、今はとりあえず後者を使っている。
  • ハイパーパラメーターはlambda(事前分布の係数)とlog0=L0(log0=-inftyとすると、コピー数を0にすることが禁じられてしまう。それを緩和するためのヒューリスティック)。
    • lambdaは大きくすればするほど、ゲノムサイズが大きすぎるときの罰則が強くなる。そのためサイズを小さくしようという圧力が高まる。
    • L0は小さい(=-inftyに近い)ほど、コピー数を0と推定する罰則が強くなる。L0が小さすぎると「とりあえず全部のk-merを残しておこう」という推定になる。L0が大きすぎると、気軽にk-merを消されてしまう。

compressionの目標

  • (概念的には) MAP推定 logP(R|G)+logP(G)を最大化する
  • (extensionと組み合わせる枠組みの上では) k-merの時点でいらないものはk+1-merの時点でもいらないはず。dbgのノード数を減らすことができる

compression自体の動き
例えばリード中の全k-merから始めて、色々なlambdaとL0で比較する。
評価指標は

  • TN/FN: compression自体の目標はk-mer
  • n_under_estimated_kmers: コピー数が
  • ヒストグラム: 真のコピー数がxのk-merの、推定コピー数のヒストグラム。
  • スコア(事後確率): 真のモデル(つまり全部正しいコピー数のdbg)をベースラインにできる。

compressionの枠組みがあまり良くなさそうな理由

compression+extensionで考える限り、compressionではコピー数を少なめに見積もることが許されない。

これまでは、ひとたびコピー数を間違えて0xにすると復活できないので、compressionでは「FN(本当は存在するのに0xと判定される)を減らしつつTN(本当に0xなものを0xと判定する)を増やし、dbg中から明らかにいらないk-merを削っていく」ことを目標にすれば良いと考えていた。

しかし、k-merの推定されたコピー数が真のコピー数よりも少ない場合にも、extensionによって問題が起きる。extensionではコピー数を増やすことができないので、
TODO 実例を示す

「小さいk-merのコピー数から決めていく」、そもそも無理では?

真のコピー数よりも絶対上にいるように推定し続けるのは無理では?

検証したいこと

  • 本当にMAP推定ができているのか?真のモデルとスコアを比較する。
  • MAP推定ができたとして、意味があるのか?

サイドプロジェクト

@ryought
Copy link
Owner Author

ryought commented Jul 8, 2022

compressionの性質を測る

点が試行のやつ
パラメーターを色で表現する

  • x=TN/y=FN

横軸がイテレーションの図

  • 確率値(尤度と事前分布) リード推定値、MAP推定値をベースラインとする
  • ゲノムサイズ(コピー数の和)と、k-merの種類数
  • kmerの正答率関係: TN/FN・n_under_estimated_kmers

@ryought ryought closed this as completed Nov 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant