magattacaのブログ

日付以外誤報

多重配列アラインメントに含まれる構造情報について ~ Potts modelとついでにTransformer~

AlphaFold2が公開されてひと月ほど経ちましたね。直近でも複合体予測がさらにパワーアップしている等々、どんな発展を遂げていくのか楽しみです。

AlphaFold2に関しては解説の記事や文献等が色々と出ていますが、正直、門外漢にはさっぱりわかりません。

基礎知識が全然足りない!ということで、生物学の専門の方には常識っぽい「多重配列アラインメントから構造情報をとれるよ」ってのはどういう話か調べてみました。 ついでに「AlphaFold2のEvoformerって何を学習しているんですかね?」ってのを妄想します。

f:id:magattaca:20210814145426p:plain

1. 参考文献

以下の文献や記事を参考にしています。

  1. 参考① Protein structure prediction by AlphaFold2: are attention and symmetries all you need? Bouatta, N., Sorger, P. & AlQuraishi, M. (2021). Acta Cryst. D77, 982-991.
  2. 参考② AlphaFold 2 is here: what’s behind the structure prediction miracle
  3. 参考③ Temple University Ron Levy Group Lecture Note 「Potts Models and Protein Covariation」 https://ronlevygroup.cst.temple.edu/courses/2017_spring/chem5412/lectures/Lecture4_SBII_2017.pdf
  4. 参考④ 福永 津嵩. 逆イジング法の生命情報データ解析への応用 JSBi Bioinformatics Review, 1(1), 3-11 (2020)

2. だいたいこんな話?

ものすごい雑にまとめるとこういうことでしょうか???

f:id:magattaca:20210814145502p:plain

・・・怒られそうな図

3. 詳しく

順番にメモしていきます。

3-1. MSAの構造予測への利用

「参考① AlQuraishi先生らの文献」によると、アミノ酸配列からのタンパク質の構造の予測に、配列一つではなく多重配列アラインメント(Multiple sequence alignment、MSA)が用いられるようになったのは、2010年代初めごろからだそうです。背景には、ハイスループットシークエンスが一般化し、関連するタンパク質間における共変異の統計モデルが発達したことなどがあるようです。

AlphaFold2以前の((第一世代)AlphaFoldを含む)構造予測モデルでは、MSAから抽出した残基間の相互作用に関する要約統計量を利用し、残基の共進化(co-evolution)をモデル化していました。ただしこれだけでは色々と無理(物理的に不可能な構造が予測される etc.)があり、物理的手法との組み合わせが必須だったそうです。

対してAlphaFold2では(統計量ではなく)MSAそのものを利用して構造予測をおこなっています。統計物理学に基づくPotts modelを利用するのではなく、生のMSAからTransformerによって学習することで情報を抽出しているそうです。

3-2. MSAってどんな?

MSA、MSAって言うけど実際どんなのなんですかね???ということでPfamから例を貼っておきます。

Pfamは、タンパク質ファミリーのデータベースであり、アノテーション隠れマルコフモデルを用いて生成された多重配列アライメントを含んでいます(Pfam(ウィキペディア))。*1

f:id:magattaca:20210814145543p:plain

図の上半分のように、複数の生物由来の配列を並べたものです。各行がそれぞれの配列で、同じ or 類似の残基が同じ列に並ぶようにギャップが挿入されてます。 3配列以上の多重配列アラインメントは進化的に保存された配列の同定などに用いられるそうです。(シーケンスアラインメント(Wikipedia))

図の下半分のように、各配列の位置で「どのアミノ酸の出現確率が高いか?」みたいなことも分かるようです。・・・なるほど。

3-3. MSAからなぜ立体構造の情報がわかるのか?

さて、MSAの利用が大事なことはわかりましたが、なぜ立体構造情報を抽出することができるのでしょうか?これは共進化の考え方に基づいているようです。

MSAで並べられているのは互いに進化的に関係している配列であり、それぞれのタンパク質のフォールドは類似していると考えられます。 MSAの配列間で異なっている残基は、進化の過程で適当に変化したわけではなく、一定の制約がかかっている考えられます。 例えば、その残基がタンパク質の中で直接他の残基と接触しているのであれば、「残基間の相互作用の親和性を保つように変化する」という制約が考えられます。 逆に言えば、そのような変化をしている残基のペアは「3D構造において直接相互作用する距離関係」にある可能性があります。

f:id:magattaca:20210814145632p:plain

上図で上半分は共進化のイメージで、下にアミノ酸の構造をWikipediaからもってきました。酸性-塩基性、疎水性-疎水性といった相互作用を保つようなペアで変化しているという模式図になっています。

以上のように、MSAの変異のペアには残基間の距離情報が埋め込まれているので、解析すれば逆に「配列から構造を予測する問題」に使えるんじゃない?ってことみたいです。

なお、上図は下記文献を引用していますが、DCA(Direct Coupling Analysis)を利用した立体構造予測を提案した有名な論文だそうです。

3-4. 共進化解析における課題とPotts model

さて、Coevolutionary analysisやContact Predictionといった用語でやりたいことが分かってきました。

「で、実際どうやってやるの?」

「とりあえず残基のペア見つけて相関をスコアにすればいいんじゃない?」

と、なりそうですが、そう単純ではないようです。

参考⑤の文献で指摘されていますが、共進化の解析で「相互作用する残基ペアのみに着目した」方法(localな手法)では、「残基ペアの相互作用が直接のものか、間接なのか見分けるのが難しい」という課題があります。

簡単に言うと、コンタクトする残基のペアA-BB-Cがある時に、ACも一緒に変化するため、実際にはコンタクトしていなくても、A-Cという相互作用があるように見えてしまうということです(偽陽性)。*2

このような直接と間接の区別をつけるため「配列全体を考慮に入れた統計モデル」(globalな手法)が使われ、それがPotts Modelです。

ここでは、対象の配列全体(S)を生成する確率モデルP(S)を考えます。P(S)は「2つの残基間の依存関係の強さを意味するパラメータ」を、「全ての残基ペア分」含むようなモデルです。そしてデータ(MSA)からそのパラメータを学習し、学習されたパラメータを「残基のペア間の依存関係の指標」として捉えます。

ちょっと用語整理。。。

f:id:magattaca:20210814145843p:plain
イジングモデルはボルツマンマシンとも関係しているらしい

タンパク質立体構造では、データがアミノ酸(カテゴリカル、〜20種類)なのでPotts modelになる感じですね。

モデル導出の流れを、参考③をもとに一枚にまとめてみました。最大エントロピーで確率分布を定義した後、ラグランジュの未定乗数法を使って解くことで式を得ています。

f:id:magattaca:20210814145919p:plain
Potts Modelの導出

あとは上記のモデルのパラメーター Jhを求めればOKです。これは最尤推定に基づくMCMCサンプリングや、擬尤度最大化法などなどで推定できるそうです。

モデルができれば以下のようなことが分かるそうです。

f:id:magattaca:20210814151831p:plain
Potts Modelから求められることとその応用

Potts modelから得られる確率的ペアワイズカップリングは、ざっくりしたコンタクトの有無の情報やより細かい距離情報へと変換することができます。 これらはフォールディング予測の幾何的な制約として使うことができるので、Potts modelはタンパク質構造の再構築に有用な情報を持っていることになります。

3-5. もう一度AlphaFold2に戻って

以上、「MSAから構造情報を取得する」というお話の背景をざっとさらってみました。

もう一度、AlphaFold2に話を戻すと、AlphaFold2ではPotts Modelを利用するのではなく、「生のMSA」から直接情報を学習しているとのことでした。 参考①の文献ではTransformerを用いた学習により「事実上独自のPotts modelを導き出しているようなものではないか」と指摘されていました。

これがどういうことなのか?もう少しだけ考えたいと思います。

4. AlphaFold2 のEvoformerは何をやっているのだろうか?

DeepMindの資料とNatureの文献*3をみると、AlphaFold2のアーキテクチャは①Embedding、②Trunk、③Headsの3つに分かれています。

f:id:magattaca:20210814150133p:plain
AlphaFold2全体像

このうちMSAは、直接は前半①と②に関わっています。というわけで、「② Trunk(Evoformer)がPotts model(のようなもの)を学習している」ってのはどういうことか?妄想してみます。

4-1. AlphaFold2の入力とEvoformer

AlphaFold2の前半で何をしているのか、参考②の記事を頼りにざっと眺めます。

入力として配列が渡されると、AlphaFold2は2つの前処理を行います(①Embedding)。 一つは「MSAを作成」することで、もう一つは「類似の構造を持つタンパク質を見つけてtemplateとする」ことです。

templateは「どのアミノ酸が、別のどのアミノ酸とコンタクトしていそうか?」というのをモデル化した「pair representation」という表現に初期化されます。 先に見たContact analysisで作成されている2次元のマップと同じ感じなので、やりたいことがわかりますね。

MSAは進化に基づいてどのアミノ酸とどのアミノ酸がコンタクトしていそうか?という情報を暗に含み、templateは類似(と想定される)構造での明なコンタクト情報を含みます。

EvoformerではMSAについてのTransformerで学習した情報を、template由来のpair representationに渡して学習し、それをまたMSAに戻して改善する、というループを回します。 つまり、Potts Modelを利用する他のモデルであれば「MSAを一度入力として利用してお終い」となりそうなところを、 AlphaFold2では「構造情報(template)をフィードバックしてMSAの精度を改善し、もう一度構造に戻す」という作業を繰り返しながら精度を上げていく、ということが行われているようです。

「独自のPotts Modelを導く」という過程が少しずつ感じられてきました。

4-2. Transformerは全体から学習する

さて、EvoformerのベースになっているTransformer(Attention)ですが、 特徴は「着目している箇所について、それ以外の全体も直接参照した」学習が行われることにあるそうです。

自然言語処理の例では、一つの単語(トークン)について、文全体の各トークンを参照して重みづけ和を計算することになるようです。

f:id:magattaca:20210814150234p:plain
Attention is All You Need

対して、Recurrent Neural Network(RNN)は前から順々に処理するので、手前のトークンの情報に基づいており、また、離れたトークンからの情報が薄まってしまう問題があるそうです。文全体を参照するTransformerの方がより文脈を考慮した学習ができる、という仕組みのようです。

Transformerの「文全体を参照する」仕組みですが、タンパク質のMSAに適応すると「着目する残基について、配列全体の情報を直接参照」することに相当しそうですね。

ところで、MSAのPotts modelは、ペアワイズの解析について直接の相互作用と間接の相互作用とを区別するために、大域的な配列全体を考慮するモデルとして導入されたのでした。配列全体という共通点に着目すると、MSAにTransformerを適用した学習が「独自のPotts Modelを導く」ようなもの、というのも納得できる気がしますね!

・・・しませんか。。。すみません。

4-3. Transformerの用語

ついでにTransformerの用語などまとめておきます。たぶんこういう話。。。*4

f:id:magattaca:20210814150421p:plain
Attentionの用語と作業

Self-Attentionはqueryがkeyとvalueが同じとなっていて、一見、上図の手順とあわないように見えます(queryが1単語だとそもそも次元が一致しない)。これは、文の単語をまとめてバッチでqueryに投げてしまえば、keyやvalueと同じ次元になるからOK、ってな感じだと思います。

もう少し具体的な処理はこんな感じ。。。

f:id:magattaca:20210822202903p:plain
行列形式のAttentionの演算

4-4. EvoformerのMSAに対するAttention

ついでのついでに、EvoformerでMSAに使われているAttentionのアルゴリズムを貼っておきます。

行方向(row-wise)と列方向(column-wise)の2種類があります。どちらもMulti-Head Attentionで、またゲート付き(gated self-attention)です。

ゲートは過去の状態を伝搬させて考慮する仕組みで、RNN(Recurrent Neural Network)における「入力された情報を長時間保持することができない」という課題を解決するために提案された、LSTM(Long-Short Term Memory)というモデルで使われているもののようです。

ではまずcoumn-wiseから。。。

f:id:magattaca:20210815151432p:plain

Nhead=8なので8個のAttentionを使っています。つまり(query, key, value)の組み合わせが8個です。上付きのhでそれぞれのheadを表しています。

(query, key, value)の表記は(q, k, v)です。またこれらの次元(先の説明でd次元になっていたところ)は c (channel,C=32)と表現されています。この表記を踏まえると、入力されたMSA(m)からAttentionを求める流れは先に見たとおりですね。

mをバイアスベクトル無しの線形変換(LinearNoBias)することで(q, k v)を用意しています。q, kとcからsofmaxで重みaを求め、これにvを掛けた重み付け和(Σav)をとっています。

少し違うのは、さらにゲート(g)とのアダマール積(要素積)がとられていることで、これがgated self-attentionとなっている部分だと思います。

また、Multi-Head Attentionは最後に複数のAttentionを一つにまとめる必要があるので、concatで連結して出力しています。

なんとなく操作がわかったぞ!

次に、row-wiseです。こちらはもう少し複雑です。 残基ペアのAttention weightを構築していて、pair representationから得られる情報を追加のバイアスとして取り込んでいます。 これによりペア表現とMSAとの間に一貫性が生まれるとのこと。。。なんのこっちゃ?

f:id:magattaca:20210815151500p:plain

新しく出てきた記号はzで、これは入力のpair representationを表します。 coulmn-wiseとの違いは、Attentionを求める際のsoftmaxで、ここにpair representation由来のバイアス(b)が加えられています。あとはだいたい一緒。

用語をおさえるとなんとなく操作がわかるもんなんですねー。操作の理由はさっぱりわかりませんが。。。

5. まとめ

以上、MSAから構造情報を取得する仕組みと、ついでにAlphaFold2のMSAに関わる部分(Evoformer)について眺めてみました。

AlphaFold2は分野の歴史と発展を踏まえたうえで行きついたもののようですが、門外漢には正直さっぱりわからないです。 賢い方々の解説を色々とつまみ食いしてお勉強してみましたが、背景が膨大すぎて難しいです。

とりあえず配列全体を考えるPotts Modelという方法と、文全体を参照するTransformerにうすーく繋がりが見えた気がするのでヨシ!

今回もいろいろと間違いが多そうなのでご指摘いただければ幸いです。

6. 追記:AlphaFold2の学習で行われるMSAのmaskについて

MSAとTransformerに関する項目として、AlphaFold2の学習(training)で行われているマスクmask)について書き忘れていました。

Transformerをベースとした自然言語処理の非常に性能の良いモデルとして、BERT(Biderectional Encoder Representations from Transformers)というものがあるそうです。

  • Devlin, J., Chang, M.-W., Lee, K. & Toutanova, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805

これもGoogle。。。

このモデルの学習は2段階に分かれており、①大規模な文章コーパスラベル無しデータ)から汎用的な言語のパターンを学習する事前学習と、②個別のタスクのラベル付きデータを用いて、そのタスクに特化させるように学習するファインチューニングからなります。

マスクは事前学習(①)で、ラベル無しデータから学習を行うための工夫として用いられています。ざっくり言うと「隠された単語を当てるゲーム」です。文章の一部をランダムにマスクし、「そのマスクされた単語がなんだったのか?、周りの単語から予測する」というタスクを用いて学習します。*5

f:id:magattaca:20210815151832p:plain

このマスクがAlphaFold2でも使われています。多重配列アラインメント(MSA)の残基の一部分をランダムにマスク(or 変異)し、元々の残基がなんだったのか予測するタスクを学習させています。

関連するMSA入力データの準備の説明について貼っておきます(MSA Clustering (Suppl. 1.2.7))。

入力データを準備する際に、MSAが大きい(sequence数が多すぎる)場合、計算コストを減らすためにランダムに配列を選択して一定の数まで減らします。そのままでは選ばれなかった配列の情報が捨てられてしまうので、選んだ配列をクラスター中心としたグループ化を行うことで残りの配列の情報考慮できるようにしているようです。

f:id:magattaca:20210815151956p:plain

マスクされたMSAに対する予測のタスクは「Supplementary Material: 1.9.9 Masked MSA Prediction」に書かれています。

f:id:magattaca:20210815152026p:plain

このようなタスクを学習することで何が嬉しいか?

AlphaFold2文献本文によると「特定の相関の統計を特徴量にハードコーディングしなくても、ネットワークが系統学的な関係や共変動の関係を学習して解釈できるようになる」ことが期待されているようです。

私は「マスクされた残基の予測」で、Pfamでみたアミノ酸出現確率の図のイメージを思い浮かべました。

f:id:magattaca:20210815152104p:plain
再掲

ネットワークが「配列のどの位置にどの残基が出現しそうか?」を予測できるということは、ある配列全体が生成する確率についての情報を学習できていることになりそうです。

もう一度Potts Modelに戻ると、「対象の配列全体(S)を生成する確率モデルP(S)」として導入されたものでした。

なんだかAlphaFold2が学習の結果、独自のPotts Modelを導いているのに納得感がでてきませんか?・・・やっぱりだめですか。すみません。

おしまい!

*1:参考 TOGO TV 「Pfamを使ってタンパク質のドメインを調べる 2017

*2:因果推論の交絡因子と似た感じのお話でしょうか?

*3:Highly accurate protein structure prediction with AlphaFold

*4:Transformerについては以下を参考にしました。