Physics and Informatics

단백질과 머신러닝: 2차구조 예측

Novelism 2022. 1. 15. 20:58

 

단백질 구조 예측 연구를 시작하고, 머신러닝을 배워야겠다고 결심한 계기가 된 논문이 있습니다.

David T. Jones의 단백질 2차 구조 예측 논문 PSIPRED입니다. 

Protein secondary structure prediction based on position-specific scoring matrices - ScienceDirect

 

Protein secondary structure prediction based on position-specific scoring matrices

A two-stage neural network has been used to predict protein secondary structure based on the position specific scoring matrices generated by PSI-BLAST…

www.sciencedirect.com

PSIPRED protein structure prediction server | Bioinformatics | Oxford Academic (oup.com)
같은 논문의 서버 버전입니다. 

나온 지 20년도 지난 논문이지만, 지속적으로 새로운 버전이 나오고 있고, 여전히 가장 좋은 2차 구조 예측 방법 중 하나로 인정받고 있습니다. 

저에겐 DCA 논문과 더불어 가장 감명 깊은 논문 중 한편입니다. 

 

 사실 저는 최근의 인공지능 신약기반 연구자들에 대해서 우려를 가지고 있습니다. 

 연구에도 역사가 있습니다. 많은 선배들이 시행착오를 거치며 길을 닦아 놓았기에 어떠한 방법론이 표준으로 인정받게 되는 것입니다. 그런 것들이 결코 단순한 관습, 관행은 아닙니다. 그래서 저는 새로운 분야를 시작할 때, 그 분야의 규칙과 문화와 역사와 언어를 배우기 위해서 노력하였습니다. 제가 그전에 연구하던 분야는 단백질 바이오인포메틱스와는 상당히 다르기에, 일단 기존의 연구들을 존중하면서 내 시각으로 문제를 재해석하는 방향을 생각했습니다. 후에 인공지능 신약개발 분야로 넘어갈 때도 마찬가지였습니다. 일단은 내가 모르는 사람이니까 기존 사람이 나보다 먼저 시작했으니 존중하고 시작합니다. 

 하지만, 모든 연구자가 그러하진 않습니다. 이미 수십 년 전부터 시행착오를 거쳐서 표준화된 방법이 개발되었지만, 새로 들어온 사람들이 그런 것을 너무 간과하는 것 같이 느껴집니다. 물론 딥마인드는 전혀 그렇지 않습니다. 기존 연구들을 이해하고 그걸 넘어서버립니다. 남과 다른 길을 간다기보다는, 남들과 같은 길에서 몇 걸음 앞까지 가버립니다. 그것이 그들의 무서운 점입니다.

단백질 2차구조 예측도 20년보다 더 이전부터 진행되어온 연구입니다. 굳이 PSIPRED 이전의 논문이 지금 와서 필요하다는 것은 아닙니다. 하지만, 그 역사를 안다면 머신러닝에 해석을 붙일 수 있고, 더 발전할 길을 찾을 수 있다고 생각합니다. 저는 역사 자체를 이야기하려는 건 아니기에 좋은 칼럼이 하나 있어서 추천합니다. 단백질의 이차구조 설명도 생략합니다. 

[남궁석의 신약연구史]단백질 2차구조 예측 - 바이오스펙테이터 (biospectator.com)

 

[남궁석의 신약연구史]단백질 2차구조 예측

이전 연재에서 단백질의 1차 구조, 즉 아미노산의 서열이 밝혀지게 된 과정을 알아보았다. 그렇다면 아미노산 서열을 기반으로 하여 단백질의 입체구

www.biospectator.com

 

 

어떤 현상에는 그 현상을 결정하는 조건들이 있을 것입니다. 예를 들어, 제 저녁 메뉴는 제가 마트에 가지 않고, 사 먹지 않고 요리를 한다면, 제 집에 보관된 식재료에 의해서 결정될 것입니다. 내일 이 지역에 비가 올지 말지는, 오늘의 주변 지역의 대기 상태에 따라서 결정될 것입니다. 어떤 사람이 학교에 지원했다면, 그 사람의 합격여부는 그 사람의 성적과 생활기록부와 면접 등에 의해서 결정될 것입니다. 이들 중 일부 예시는 완벽한 결정이 불가능하고 확률적일 수도 있습니다만... 

현상을 예측하기 위해선, 그 현상에 영향을 미치는 요소를 알아야 합니다. 그것들을 피처로 사용하여야 예측이 가능해집니다. 주어진 피처로부터 예측으로부터 최대한 도달할 수 있는 정확도가 있다면 그때의 에러를 베이즈 에러라고 부릅니다. 이것을 넘고 싶다면, 더 많은 피처를 도입해야만 합니다. 

단백질의 2차 구조를 예측하기 위해선 단백질의 2차 구조가 무엇에 의해 정해지는지 알아야 합니다. 

DSSP 기준으로 2차 구조는 특정 아미노산이 Helix (H)인지, Strand (S) 인지, Coil (C, 혹은 loop)인지 아미노산 residue 단위에서 배정합니다. 그럼 단백질 서열의 10번째 residue C가 H인지, S인지, C인지는 무엇에 의해 결정될까요?  

 무슨 정보를 줘야 이것을 예측할 수 있을까요? 물리 시뮬레이션적으로 하지 말고 생물정보학적으로 접근한다고 가정합시다. 

 가장 단순한 방법은 이것입니다. 단백질 아미노산 별로 각 아미노산에서 H와 S와 C의 빈도를 계산하고, 그것을 예측 확률처럼 생각하는 것입니다. 통계분석에서 가장 쉽게 생각할 수 있는 방법이겠죠. 동전의 앞면과 뒷면이 나올 확률은, 던져봐서 빈도를 세면 되는 것입니다. 하지만 이렇게 했을 때, 정확도가 얼마나 높을까요? 결과는 잘 모르지만 정확도가 별로 높지 않을 것입니다. 쉬운 방법이니까 진짜 해볼 수도 있습니다. 2차 구조 예측을 정확히 하는 것이 목표가 아니라, 2차 구조에 각 아미노산이 미치는 영향이 얼마나 알고 싶다면 조사해보는 것도 좋습니다. 

 

일단 데이터가 충분 한가부터 생각해보죠. 구조가 알려진 단백질은 20만 개 정도이지만 중복을 좀 제거해서 5만 개라 가정하고, 각 단백질마다 서열수가 200 정도라고 가정하면, 총 residue의 수는 200*5만이니까  1000만이고, residue 당 아미노산 비율이 균일하다 가정하면 각 아미노산당 데이터는 1000만/20 = 50만 개의 데이터가 있으니 통계 분석에는 충분합니다. 

하지만 이걸 그냥 세는 것은 좋지 않고, 중복도를 많이 제거하는 편이 좋습니다. 

 

그럼 문제를 조금만 더 복잡하게 해 보죠. 2차 구조를 결정하는 요소가, 해당 residue  뿐만 아니라, 그 전과 후, 즉 3개의 아미노산이라면 어떨까요? 총데이터의 수는 별 차이 없는데, 조합의 수가 20에서 20*20*20=8000으로 늘어납니다. 각 조합당 데이터의 수는 1000만/(8000)으로 펩타이드 3-mer 당 천여 개의 데이터가 있을 것입니다. 이 정도도 통계를 내기에 충분한 수이긴 합니다. 

 

하지만 더 늘려서 15-mer를 사용한다면? (보통 ML 2차 구조 예측에서 이 정도를 사용합니다.) 20^15 가지의 fragment 가 가능한데, 실험적으로 알려진 구조로부터 그렇게 다양한 조각을 얻을 수 있을까요? 당연히 없습니다. 그런데 어떻게 2차 구조 예측이 가능할까요? 

 머신러닝을 공부해보신 분들이라면 매니폴드라는 것을 떠올리실 것입니다. 어떤 공간에서, 실제로 데이터가 존재하는 곳은 매우 희박하고, 그 데이터들은 공간의 특정 위치에 몰려있습니다. 즉, 펩타이드 조각들도, 실제로 생물학적인 의미를 가지는 조합들은 그리 많지 않고, 2차 구조 예측에서도 그런 생물학적으로 의미 있는 조각에 대해서만 예측을 할 뿐입니다.

 이미지를 예로 들면, 28*28 사이즈의 이미지는 784개의 bits로 표현이 가능한데, 이것들이 전부 다 0과 1이라면 조합수가 2^784 개가 가능하지만, 이들 중에 대부분은 노이즈일 뿐이고 정보라 하기 어렵습니다. 손글씨를 인식할 뿐이지, 노이즈를 예측할 필요는 없습니다. 

 생명 정보도 이와 비슷합니다. 단백질 서열은 단백질의 기능을 결정합니다. 진화를 거치며 형성되어왔고, 생존에 유리한 것은 남지만, 그렇지 못한 것들은 도태되어왔습니다. 결코 무작위 서열이 존재하는 것이 아니라, 단백질로써 기능할 수 있게 하는 서열들이 남은 것입니다. 

 

 또 다른 질문을 해봅시다. 아미노산 서열 CCCCC와 CCCCA는 2차 구조가 얼마나 다를까요? 무작위 서열 변화에서 말한다면, 구조가 크게 달라질 수도 있습니다. 하나의 아미노산의 변이만으로 단백질을 고장낼 수도 있습니다. 세포가 기능하지 못하고 사멸하거나, 살아남긴 하지만 암세포가 될 가능성도 있습니다. 하지만 현재 존재하는 안정된 서열들에서 본다면, 크게 달라지지 않는 서열 변이들이 살아남아왔을 것입니다. 

 

여기서 힌트를 얻을 수 있습니다. 진화적인 친족 관계를 안다면, 여기서부터 유용한 정보를 얻을 수 있지 않을까?라는 것입니다.

 예를 들어서 특정 친족 서열을 정렬했을 때, 특정 위치의 아미노산은 변하지 않는데, (변이가 일어나지 않는다는 게 아니라, 변이가 일어난 놈은 대부분 죽었다고 해석하는 것이 옳을 것입니다.) 다른 위치는 변이가 활발히 일어난다면? 

 변이의 빈도가 구조적인 안정성과 어떠한 관련이 있지 않을까? 그리고 그 변할 수 있는 아미노산 종류가 전기적으로, 구조적으로 가까운 것만 허용되는지, 아니면 더 다양할 수 있는지... 이런 것들이 매우 중요한 정보가 됩니다. 

 또 하나 유용한 것이 있는데, 유사한 서열은 유사한 구조를 가진다는 가정을 할 수 있습니다. 물론 이것은 진화적으로 살아남은 친족들 사이에서 통하는 개념입니다. 내가 임의로 서열에서 하나를 바꿔도 그 구조가 안정될 거라 기대할 순 없습니다.

 이 가정하에서 만약 내가 특정 서열의 3D 구조를 안다면, 그와 친족인 서열의 3D 서열도 이와 유사할 것이라 기대할 수 있습니다. 내가 구조를 예측하고 싶은 서열과 동일한 template이 존재한다면, 그 template의 구조가 답이라고 말해도 되지만, 완벽하게 일치하진 않는 template이라도 친족 서열에 대해 답을 알고 있다면, 그것이 유사한 답이라고 할 수 있다는 것입니다. 3D 구조나 2차 구조나 모두 해당되는 것입니다. 

 즉, 매니폴드를 고려하지 않더라도, 데이터가 20^15 씩이나 필요하지 않다는 것입니다. 

 

 그래서 단백질 바이오인포메틱스의 연구들은 일단 기본적으로 친족 서열을 탐색하고 시작합니다.

 예전에는 대부분 Blast를 사용하였고 최근에는 그 이외에도 HHblits나 JackHMMER을 사용하기도 합니다. 

 이렇게 친족 서열을 찾고, 아미노산 별로 정렬해서 Multiful sequence alignment (MSA)를 얻습니다. 

 여기서 각 위치에 따른 빈도를 셉니다.

두 아미노산이 서로 얼마나 유사한지(아미노산이 얼마나 서로 교환 가능한지)를 가지고 만든 scoring matrix 가 있는데, 

 여기에 MSA로부터 얻은 빈도를 반영해서 position specific scoring matrix (PSSM)로 확장합니다. 이를 sequence profile이라고도 합니다. 혹은 frequence를 직접 사용하기도 합니다. 

 sequence를 one-hot code로 사용하는 것보다 profile을 만들어서 사용하는 것이 예측 정확도를 크게 향상합니다.

PSIPRED는 PSSM에 neural network을 사용하였고, 정확도 예측이 대략 70~80%까지 상승하였습니다. 

단백질 서열도 1차원 데이터이니까 CNN을 사용할 수 있습니다. 딥마인드 전까지 단백질 분야에서 딥러닝을 제일 잘 사용하던 Jinbo Xu 그룹에서 FNN 대신 CNN를 사용해서 성능 정확도를 높인 것도 있습니다. 

 

딥러닝에서 비선형적으로 레이어를 쌓고 피처 임베딩 해서 얻으려는 것은, 결국 공간 변환을 통해서 서로 같은 클래스에 속하는 데이터가 가까이 모이게 하는 것입니다. 그래야 식별이 잘 되겠죠. 

one-hot 타입의 sequence 보다 profile에서, 친족 서열 사이의 상대적 거리가 더 가까워질 것으로 기대할 수 있습니다.

 

 그런데... sequence -> profile 이 딥러닝에서 생소한 것일까요?

 딥러닝에서 데이터가 적을 때 사용하는 방법 중 semi-supervised learning 이 있습니다. 

 그리고 그중 하나는, 데이터의 분포를 학습하는 generative model (unsupervised learning)과 supervised learning을 함께 사용하는 것입니다. 

sequence profile이라는 것 자체가 데이터의 분포입니다. 

사실 sequence profile에서 단순히 비율을 계산하는 것보다 더 좋은 direct coupling analysis (DCA)라는 것이 나왔는데, 이것은 일종의 생성 모델입니다.

 제가 하고 싶은 말이 무엇이냐면, 이미 딥러닝 방법은 아니지만, 20년도 이전부터 단백질 분야에선 semi-supervised learning과 유사한 아이디어를 사용하고 있었다는 것입니다. 

 딥러닝이라고 해서 서열을 그냥 넣어주면 기존 방법보다 학습이 잘된다 같은 것은 아닙니다. 왜냐하면 데이터가 그렇게 충분하지 않기 때문입니다. 차라리, profile을 만드는 과정에서 딥러닝의 generative model을 도입하여 semi-supervised learning을 하거나... 여러 좋은 선택지들이 있습니다.

알파폴드 2의 경우도 친족 서열 수집과 서열 정렬 부분에 상당히 집중을 하였습니다. 

 

하지만, 인공지능 신약개발 쪽에서 사용한다는 메서드 (sequence based DTI 같은) 에선 서열 대신 profile을 도입하는 것은 잘 보이지 않더군요. 딥러닝 메소드에만 집중한 나머지, 단백질 분야의 머신러닝 기술들이 등한시되고 있습니다.