深度学习基础回顾:从神经元到Transformer
我个人觉得,要啃下AlphaFold这块硬骨头,先得把地基打牢。深度学习这些年,几个关键的思想和架构,就像搭积木一样,一层一层叠上去的。今天我就带着大家捋一捋这几块积木:神经网络、卷积网络、残差网络,还有Transformer。不复杂,但全是干货。
1. 神经网络:最基本的单元
咱们从最土的神经元说起。一个神经元就是个简单函数:输入加权求和,然后扔进一个非线性激活函数里。就是这么个玩意儿,堆多了,就成了网络。
# 一个最简单的线性层
import torch.nn as nn
# 输入维度100,输出维度200
layer = nn.Linear(100, 200)
# 前向传播
output = layer(input_tensor)
我在早年做蛋白质性质预测时,遇到过一个大坑。数据量不大,硬堆了5层全连接层。结果就是过拟合得一塌糊涂。模型把训练集背得滚瓜烂熟,但一遇新数据,全歇菜。后来我发现,对于小数据集,少点层数,加点Dropout,反而更稳。
3. 卷积网络:捕捉局部模式的高手
卷积神经网络(CNN)的核心,就是局部连接和权值共享。你想想看,一张图里,一个物体特征通常只占一小块区域,CNN用一个小窗口(卷积核)扫过整个图,既抓住了局部细节,又大大减少了参数量。
# 一个典型的2D卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=64,
kernel_size=3, padding=1)
# 输入: [batch, 3, H, W]
feature_map = conv_layer(input_image)
我经常看到初学者对“感受野”这个概念一脸懵。简单说就是:输出层上的一个点,对应原图上多大区域。层数越深,感受野越大。在蛋白质结构预测里,早期的残基相互作用预测,很多就是靠堆叠CNN来扩大感受野的。
3. 残差网络:让深层网络真正“深”起来
你以为网络越深效果越好?早年的深度网络,层数一多,就出现“退化”问题——训练误差反而增大。ResNet的解决方案非常优雅:让网络学习残差映射。本来要学一个H(x),现在学 F(x) = H(x) - x,然后输出 F(x) + x。这就是那个著名的“跳过连接”。
# 一个残差块的核心代码
class ResidualBlock(nn.Module):
def __init__(self, channels):
super().__init__()
self.conv1 = nn.Conv2d(channels, channels, 3, padding=1)
self.conv2 = nn.Conv2d(channels, channels, 3, padding=1)
self.relu = nn.ReLU()
def forward(self, x):
out = self.relu(self.conv1(x))
out = self.conv2(out)
return self.relu(out + x) # 跳过连接在这里
我还遇到过这种情况:自己手写残差块时,忘记把x加到输出上。结果训练半天,loss纹丝不动。排查了一整天,才发现这个低级错误。嗯,这种错误犯过一次,你这辈子都不会再犯了。
4. Transformer:从序列到自注意力
Transformer不再依赖局部窗口,而是用自注意力机制,直接计算序列中任意两个位置间的依赖关系。这很关键,因为AlphaFold里,我们需要知道第5个残基和第150个残基在三维空间里是不是挨着的。
自注意力是怎么做的?输入序列经过三个线性变换,得到查询Q、键K、值V。然后计算Q和K的点积,经过softmax归一化,加权求和V。公式很简单:
Attention(Q, K, V) = softmax(Q * K^T / sqrt(d_k)) * V
# PyTorch实现一个简化版自注意力
import torch
import torch.nn.functional as F
def scaled_dot_product_attention(Q, K, V):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
attn_weights = F.softmax(scores, dim=-1)
output = torch.matmul(attn_weights, V)
return output
Transformer还引入了多头注意力。把Q、K、V分成8个或16个头,每个头在不同的子空间里学习关系,最后拼接起来。这就像是组专家小组,每人从不同角度分析问题,综合起来就是全面的判断。
知识结构图:本章脉络
下面的SVG图概括了本章讲到的几个核心概念,以及它们之间的演进关系。从最基础的神经元,到捕捉局部特征的CNN,再到解决深层网络退化问题的ResNet,最后到建立全局依赖的Transformer。AlphaFold就是沿着这条路,把这些组件巧妙地组合起来的。
看完这张图,你大概明白了。AlphaFold并没有凭空创造什么颠覆性技术,而是恰当地运用了深度学习的几块积木。ResNet保证了上百层网络也能收敛,CNN有效提取了局部序列特征,Transformer则让模型能“看到”相距甚远的残基之间的相互作用。这三者组合,就成了蛋白质结构预测的魔法。
关键差异对比:四架马车
| 架构 | 核心机制 | 关键优势 | 在AlphaFold中的体现 |
|---|---|---|---|
| 神经网络 | 线性映射 + 非线性激活 | 万能逼近能力 | 基础层,用于特征变换 |
| CNN | 局部感受野 + 滑动窗口 | 参数少,捕捉局部模式 | 结构模块中的一维卷积 |
| ResNet | 跳过连接 / 恒等映射 | 缓解退化,支持极深层网络 | Evoformer中的残差块设计 |
| Transformer | 自注意力 + 多头机制 | 捕获全局依赖,并行计算 | Evoformer核心:成对注意力和串行注意力 |