---
title: "用 PSSM 與多視窗 CNN 辨識外排蛋白"
description: "回顧我大學時做的第一個深度學習研究專題。"
lang: zh-Hant
published: 2026-11-06
tags: ["bioinformatics", "deep-learning", "research-notes"]
canonical: https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/
translation: https://note.xavierchang.dev/en/posts/efflux-protein-cnn/index.md
author: Xavier
---

# 用 PSSM 與多視窗 CNN 辨識外排蛋白

> 回顧我大學時做的第一個深度學習研究專題。

> [!NOTE] 摘要
> 寫這篇文章，是因為在整理過去資料時，想用一份比履歷上的一行經歷更詳細、又比完整論文更好懂的筆記，把以前做過的事記錄下來。
>
> 這篇回顧的是我 2022 年在大學資工系的畢業專題，也是我第一次比較正式地接觸深度學習研究。特別感謝當時指導我的歐昱言教授，從老師身上學到的研究方法與思考問題的方式，到今天仍讓我受益良多。
>
> 當時我想回答的問題是：只看蛋白質的胺基酸序列，能不能用深度學習判斷它是不是會把抗生素排出細胞的「外排蛋白」？我的做法是先用 PSSM 把序列中的演化資訊編碼成矩陣，再用多視窗卷積神經網路（mCNN）掃描辨識。最後在獨立測試資料上，從膜蛋白與運輸蛋白中辨識外排蛋白的 MCC 分別達到 0.99 與 0.98，明顯高於傳統分類器中表現最好的 SVM（0.74 與 0.71）。
>
> 以下依照模型的流程說明：輸入的蛋白質序列、把序列變成數字的特徵工程、負責判斷的分類器，最後是評估方式與實驗結果。

## 研究問題

世界衛生組織（WHO）把抗微生物藥物抗藥性列為重大的全球健康威脅，並估計 2021 年全球有超過 470 萬人的死亡與細菌抗藥性有關。[^who]

外排蛋白（efflux protein）是嵌在細胞膜上的一種運輸蛋白，負責把有毒物質排出細胞，抗生素也是它排出的對象之一：一篇 2023 年的綜述指出，抗生素外排是致病細菌最常見的抗藥性機制之一。[^efflux]

*（互動圖，請見網頁版：https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/）*

要確認一個膜蛋白是不是外排蛋白，傳統做法是做生物實驗，但膜蛋白的實驗既費時又費力。如果能先用電腦從序列快速篩選出可能的外排蛋白，實驗資源就能集中在最有希望的候選上。專題把問題拆成兩個二元分類任務：

- **外排蛋白 vs. 膜蛋白**：從一般的膜蛋白中找出外排蛋白。
- **外排蛋白 vs. 運輸蛋白**：從運輸蛋白中找出外排蛋白。後者比較難，因為外排蛋白本身就是運輸蛋白的一種。

```diagram
flow: 蛋白質序列（輸入）-> One-hot／PSSM（特徵工程）-> 多視窗 CNN（分類器）-> 判斷結果（外排蛋白／非外排蛋白）
caption: 專題的整體流程，以下各節依序說明
```

## 蛋白質序列：模型的輸入

蛋白質是由胺基酸一個接一個連成的長鏈。生物體內常見的胺基酸有 20 種，每一種都有一個單字母代號，例如 `M` 是甲硫胺酸、`K` 是離胺酸、`A` 是丙胺酸。把一條蛋白質從頭到尾的胺基酸依序寫下來，就是它的**胺基酸序列**，例如 `MKTLLIAVAG…`。

一條蛋白質的長度從幾十個到上千個胺基酸都有。這條鏈會摺疊成特定的立體結構，而結構決定了它的功能；所以不做實驗時，序列是推測一個蛋白質「做什麼」最直接的線索，也是這個模型唯一的輸入。

*（互動圖，請見網頁版：https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/）*

## One-hot 與 PSSM：特徵工程

模型只能處理數字，所以要先把序列中的每個位置轉成一列數字。長度為 L 的序列，兩種編碼都會變成 L × 20 的矩陣，每一欄對應一種胺基酸，差別在格子裡放的是什麼。

**One-hot 編碼**是最直接的做法：每一列只有該位置實際出現的那種胺基酸是 1，其餘 19 格都是 0。它只記錄「這裡是什麼」，所以任兩種不同的胺基酸之間，差異都一樣大。

<strong>位置特定評分矩陣（Position-Specific Scoring Matrix，PSSM）</strong>的出發點是一個生物學上的觀察：<strong>功能相似的蛋白質，序列也會很像，但不會完全一樣。</strong>它們通常來自共同的祖先，在演化過程中，對功能很重要的位置很少改變，不重要的位置則可以換成別的胺基酸，蛋白質照樣能運作。

所以，與其只看一條序列，不如把一群相似的序列對齊在一起，看每個位置「通常是什麼、還能換成什麼」。PSSM 就是這個統計結果。做法是用 PSI-BLAST 到大型蛋白質資料庫中反覆搜尋相似的序列：每一輪把找到的顯著比對結果整合成一個位置特定的分數矩陣，再用它進行下一輪搜尋。[^psiblast] 最後每一格是一個分數，表示在這群相似的蛋白質中，這個位置出現這種胺基酸的傾向有多高：

- **保守的位置**：在所有相似序列中幾乎都是同一種胺基酸，所以只有一兩種胺基酸是高分，其他都是負分。這通常表示這個位置對功能很重要。
- **變化大的位置**：不同序列在這裡放了不同的胺基酸，所以很多種胺基酸的分數都差不多。

換句話說，one-hot 只告訴模型「這條序列長什麼樣」，PSSM 則告訴模型「這一類蛋白質通常長什麼樣、哪裡可以變」。

點一下序列中的字母，比較同一個位置在兩種編碼下的差別：

*（互動圖，請見網頁版：https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/）*

## 多視窗卷積神經網路：分類器

有了 PSSM 之後，我需要一個模型來讀這張 L × 20 的矩陣。我選擇卷積神經網路（CNN），因為它很擅長在一長串資料中找出局部的樣式。在序列上做卷積的方式是：

1. 每個**濾波器**有固定的寬度 w，像一個視窗，一次蓋住連續 w 個位置的 20 個分數。
2. 視窗沿著序列一格一格滑動，每到一個位置，就把視窗內的分數和濾波器的權重相乘再加總，得到一個分數。分數高，表示這一段序列很符合這個濾波器學到的樣式。
3. 模型會同時學很多個濾波器，各自負責不同的樣式。

一開始我只用單一寬度的視窗，結果發現不管選哪個寬度，總有一些情況表現不好。我的理解是：蛋白質上有意義的區段長短不一，一種寬度的視窗只抓得到其中一種長度。所以我參考了多視窗卷積神經網路（multi-window CNN，以下簡稱 mCNN）的做法，**同時用好幾種寬度的視窗**掃描同一張 PSSM，再把結果合起來。[^mcnn] 視窗的寬度怎麼選，我是先逐一測試單一寬度，再把幾種寬度組合起來比較。

接著要處理的問題是序列長短不一。為了讓所有序列能一起送進模型，我先把每條序列的 PSSM 補零到同樣的長度。掃完之後，每個濾波器沿著序列得到的是一整排分數；我用 <strong>one-max pooling</strong>（只取最大值的池化）只保留每個濾波器的最高分，所以不管它要找的樣式出現在序列的哪個位置，每個濾波器都只輸出一個數字，所有濾波器合起來就是固定長度的特徵向量。最後，我在 dropout 之後接上一個有 1,024 個神經元的全連接層和 softmax，輸出這個蛋白是不是外排蛋白。

勾選不同的視窗寬度，按播放看掃描的過程，再試試把序列加長：

*（互動圖，請見網頁版：https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/）*

把上面這些步驟串起來，就是整個模型的架構：

*（互動圖，請見網頁版：https://note.xavierchang.dev/zh/posts/efflux-protein-cnn/）*

## 如何評估：MCC

外排蛋白的數量遠少於其他兩類，在膜蛋白資料集中只占約一成。這種不平衡的資料不適合只看準確率：一個把所有蛋白都猜成「不是外排蛋白」的模型，準確率也能超過九成，卻完全沒有用。

所以專題主要用 <strong>MCC（Matthews 相關係數）</strong>評估模型。MCC 同時考慮兩類的對錯，範圍是 −1 到 1：1 代表全部判斷正確，0 代表跟隨機猜差不多，上面那個「全部猜不是」的模型 MCC 就是 0。

## 實驗結果

以下各表來自不同階段的實驗，視窗組合與濾波器數量不同，所以 PSSM + mCNN 的 MCC 不完全一樣；最終模型的結果是最後一張表。

### 資料與設定

- **資料來源**：從 UniProt 下載膜蛋白、運輸蛋白與外排蛋白序列，移除長度小於 50 個胺基酸的序列。
- **去除相似序列**：用 CD-HIT 把相似度超過 70% 的序列歸為同一群，每群只保留一條，避免幾乎一樣的序列同時出現在訓練與測試資料中。
- **切分**：各類別依 80% / 20% 分成訓練資料與獨立測試資料。
- **不平衡處理**：在訓練資料上用 SMOTE 補足少數類別的樣本。
- **調參**：以 K-fold 交叉驗證選擇視窗組合與濾波器數量。

| 類別 | 原始序列 | 去除相似序列後 | 訓練（80%） | 獨立測試（20%） |
| --- | --- | --- | --- | --- |
| 外排蛋白 | 6,458 | 570 | 457 | 113 |
| 膜蛋白 | 13,111 | 5,422 | 4,338 | 1,084 |
| 運輸蛋白 | 7,328 | 2,272 | 1,818 | 454 |

### 特徵：PSSM 比 one-hot 好

在相同的 mCNN 模型下：

| 輸入特徵 | 外排 vs. 膜蛋白（MCC） | 外排 vs. 運輸蛋白（MCC） |
| --- | --- | --- |
| PSSM | 0.95 | 0.97 |
| One-hot | 0.90 | 0.88 |

### 分類器：多種寬度比單一寬度好

以外排 vs. 膜蛋白為例：

| 視窗寬度 | MCC |
| --- | --- |
| 單一寬度（最佳：24） | 0.85 |
| 兩種寬度（28、16） | 0.96 |
| 三種寬度（28、16、24） | 0.96 |
| 四種寬度（28、16、24、20） | 0.93 |

從一種寬度增加到兩種，MCC 從 0.85 提升到 0.96；再增加寬度，MCC 維持在 0.93 到 0.96 之間，沒有再明顯提升，所以視窗組合是一個需要調整的超參數。以四種寬度（28、16、24、20）測試濾波器數量時，濾波器從 4 個增加到 256 個，MCC 也從 0.65 提升到 0.98。

### 與傳統分類器比較

在獨立測試資料上，使用相同的 PSSM 特徵：

| 模型 | 外排 vs. 膜蛋白（MCC） | 外排 vs. 運輸蛋白（MCC） |
| --- | --- | --- |
| KNN | 0.47 | 0.26 |
| Random Forest | 0.54 | 0.61 |
| SVM（RBF kernel） | 0.74 | 0.71 |
| PSSM + mCNN | 0.99 | 0.98 |

## 結論

PSSM 把「功能相似的蛋白質會長得像、但不完全一樣」的演化資訊帶進每一個位置，讓模型知道哪些位置是保守的；多視窗 CNN 則用不同寬度的視窗同時掃描，再用 one-max pooling 把每個濾波器的結果濃縮成一個數字。兩者結合，在這份資料上能有效區分外排蛋白與一般的膜蛋白、運輸蛋白。

回頭看，這個專題也有幾個限制：

- **只在單一資料集上驗證**：所有結果來自同一份資料與切分。MCC 接近 0.99 是非常高的分數，若要確認結果能推廣到其他資料，可以再用一份獨立收集的資料驗證。
- **相似度門檻**：70% 的門檻只排除了非常接近的序列，訓練與測試資料之間仍可能有中度相似的序列。若要更嚴格地評估，可以考慮更低的門檻。
- **PSSM 的計算成本**：每條序列都要用 PSI-BLAST 在大型資料庫上反覆搜尋，序列一多就很耗時。這也是後來研究轉向蛋白質語言模型的原因之一。[^review]
- **只解決第一步**：這個模型只負責篩選出可能的外排蛋白，之後的結構分析與藥物篩選不在專題的範圍。

[^who]: World Health Organization，[Antimicrobial resistance（fact sheet）](https://www.who.int/news-room/fact-sheets/detail/antimicrobial-resistance)。

[^efflux]: Gaurav, A. et al.（2023）。[Role of bacterial efflux pumps in antibiotic resistance, virulence, and strategies to discover novel efflux pump inhibitors](https://doi.org/10.1099/mic.0.001333)。*Microbiology*, 169(5), 001333。

[^psiblast]: Altschul, S. F. et al.（1997）。[Gapped BLAST and PSI-BLAST: a new generation of protein database search programs](https://doi.org/10.1093/nar/25.17.3389)。*Nucleic Acids Research*, 25(17), 3389–3402。

[^mcnn]: 多視窗掃描的做法參考 Ho, Q.-T., Le, N. Q. K., & Ou, Y.-Y.（2022）。[mCNN-ETC: identifying electron transporters and their functional families by using multiple windows scanning techniques in convolutional neural networks with evolutionary information of protein sequences](https://doi.org/10.1093/bib/bbab352)。*Briefings in Bioinformatics*, 23(1), bbab352。

[^review]: 從多重序列比對到蛋白質語言模型的演進，可參考我們實驗室之後發表的綜述，整理了膜蛋白序列特徵從 PSSM 等演化資訊到預訓練語言模型的發展：Ou, Y.-Y., Ho, Q.-T., & Chang, H.-T.（2023）。[Recent advances in features generation for membrane protein sequences: From multiple sequence alignment to pre-trained language models](https://doi.org/10.1002/pmic.202200494)。*Proteomics*, 23(23–24), 2200494。
