CLOSE

Juliaを用いたタンパク質のエントロピー計算(全1記事)

タンパク質のエントロピー計算に、PythonではなくJuliaを採用した訳

2018年10月20日、第8回目となるイベント「JuliaTokyo」が開催されました。技術計算を得意とする新しい汎用プログラミング言語であるJulia。その知見と共有しJuliaの普及を促すため、実際にJuliaを用いているエンジニアたちが一堂に会し、自身の事例を語りました。プレゼンテーション「Juliaを用いたタンパク質のエントロピー計算」に登場したのは、omi_dev氏。すでに発表されているエントロピー解析の理論を、Juliaを用いて実装する方法とその成果について解説します。講演資料はこちら

Juliaを用いたタンパク質のエントロピー計算

omi_dev氏(以下、omi_dev):では『Juliaを用いたタンパク質のエントロピー計算』という題で発表させていただきます。サトウタカアキと申します。

Twitterはomi_devというアカウントでいろいろやってまして。今大学院のM1です。先ほど発表されたサトウさんのラボ見学に行ったら「Juliaはいいぞ」と言われてJuliaを始めました。

やっていることとして、研究は生物物理です。主にタンパク質のシミュレーションとか、あとは趣味で競技プログラミングを多少やっていて。今度のコドフェスの本選に出場が決定いたしました。

今回発表するテーマが、下のほうの細々した論文のエントロピーを解析するので、理論だけ載ってるから実装してくれ、ということで実装します。

したものがこちらになります。ちょっと出すと時間があれなんですけど。GitHubで大文字でBILABって検索していただければたぶん出るんじゃないかなと思います。

私が書いたんですけど助教に渡したら助教がコミットしました。

(会場笑)

今回画期的だったこと

なにをしたかと言うと、エントロピー計算って非常にガバガバな部分が多くて。今までのやり方はいろいろと改善手法があったんですが、どれも温度安定性が非常に良くないという問題がありました。今回めちゃくちゃいい方法が出たのでそれをやってみます。

どこが画期的だったかと言うと、シミュレーションって三次元で行うので、当たり前ですが三次元座標で出てきます。それをタンパク質の内部座標、つまり結合の長さと角度と二面角で表すと、系全体としての並進・回転以外の3n-六次元をキープできます。

結果として、物理的にある程度正しい座標計を導入することができるというのが、タンパク質業界で内部座標と表現されます。ここからエントロピーの式にぶち込んで計算すると良いよっていう話でした。

ところがこれをJuliaでやろうとすると非常に大変です。なんでかと言うと、そのシミュレーションの結果が100ギガくらいあって、前処理かましてもギガバイト単位から落ちません。

このパーサを書きたくないので、PythonのライブラリにMDAnalysisというのがありまして、こちらをPyCall経由で使ってJuliaを数値型で無理やり持ってきました。

あえてJuliaで書いた理由

ではなぜわざわざJuliaで書いたのか、Pythonで書かなかったのかと言うと、1つにはやはり競技プログラミングの趣味に由来します。

使えなくはないんですよ。Juliaが存在するところがあって。ところが制限時間2秒なんですね。Juliaを起動すると1秒ちょっとかかるので、わりと無理です。

(会場笑)

なので今回論文を読んでみてちょっと競プロ的なことを使えそうだな。例えばBFSやったりとか。累積和を書いてたんですけど、なんか気づいたら消えてたんですけど。ここらへんをJuliaで書きたかったというのが趣味のほう。

実益としましては、やはり内積外積の計算が山ほどあって、それをサクサク書ける。あとはforループを回してもPythonとは違ってわりと早いです。

あと1番びっくりしたのが、対称行列の行列式のlogという補正項の部分が2行で書ける。

上の行でSymmetricでパタンってやって、下の行でlogabsdetっていう行列式の内部関数を使って行列式のlogのほうだけを持ってくるみたいなことを。ただこの2行がたぶん1番重い部分ですね。

結果を振り返って

結果としましては、ごめんなさい、まだ論文が出てないので具体的な数値が一切書けないんですけど。とりあえず動きました。

手法からして内部座標使ったりしてぜんぜん違ったんですけど、普通に2、3倍速くらい速くて、BILAB一同かなり驚きました。Juliaはすばらしいと。

ただ1番大事な妥当性なんですが、既存手法よりはマシで、最初の図で出しましたここの1番いいほうで1パーセント切るくらいの誤差っていうところまではちょっと再現しきれなくて。

いろいろ見てみたんですが、補正する項がうまくいってないと。バージョン0.6だと動いてたんですけど、0.7以降でここが0に飛んじゃうっていうのが潰せてなくて。たぶんここを潰せばもうちょいマシになるのですが、まだ手がつけられてない状況です。

まとめとしましてはJuliaの売りである数値計算の速さというのを自分の研究のうえで役立たせることができました。

ただ、こういう非常にマイナーな、とりあえず実装するみたいなのは誰もやっていないことなので欲しけりゃ自分でやるしかないな、っていうのは実務上でも体感した次第です。

以上です。ありがとうございました。

(会場拍手)

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!