意大利米兰大学结构生物信息学教程-02 生物分子动力学的统计力学视角

文章目录

  • [Notes 课件](#Notes 课件)
    • 为什么我们需要统计力学视角?
    • 先简单回顾一下我们的统计学知识(概率论与数理统计)
      • 概率基础:采样与直方图
        • [1. 随机过程与采样](#1. 随机过程与采样)
        • [2. 绝对概率 vs 相对概率](#2. 绝对概率 vs 相对概率)
      • 概率分布类型
        • [1. 离散均匀分布(公平骰子)](#1. 离散均匀分布(公平骰子))
        • [2. 离散有偏分布(作弊骰子)](#2. 离散有偏分布(作弊骰子))
        • [3. 连续概率分布(高斯分布)](#3. 连续概率分布(高斯分布))
      • 核心统计量
      • 多维概率分布
        • [1. 投影(边缘分布)](#1. 投影(边缘分布))
        • [2. 相关性](#2. 相关性)
    • 核心桥梁:玻尔兹曼分布
      • 什么是玻尔兹曼分布?
      • 玻尔兹曼分布与softmax的关联
      • 统计与力学的连接:玻尔兹曼分布
      • 各态历经性(Ergodicity)/遍历性
      • 自由能:宏观态的有效能量
        • [自由能 F i F_i Fi定义:从微观势能 U ( x ) → U(x)\to U(x)→宏观状态有效能(微观态积分粗粒化)](#自由能 F i F_i Fi定义:从微观势能 U ( x ) → U(x)\to U(x)→宏观状态有效能(微观态积分粗粒化))
          • [1. 微观态 vs 宏观态(State)](#1. 微观态 vs 宏观态(State))
          • [2. 宏观态占据概率(积分玻尔兹曼权重)](#2. 宏观态占据概率(积分玻尔兹曼权重))
          • [3. 自由能定义式(关键公式)](#3. 自由能定义式(关键公式))
        • [1. 状态(State)的定义](#1. 状态(State)的定义)
        • [2. 自由能与概率的关系](#2. 自由能与概率的关系)
      • [能量 - 概率 - 时间的统一关系](#能量 - 概率 - 时间的统一关系)
        • [1. 微观与宏观的分野](#1. 微观与宏观的分野)
        • [2. 时间尺度与自由能垒](#2. 时间尺度与自由能垒)
        • [微观规律↔宏观规律总结(能量 U U U vs 自由能 F F F;概率指数依赖能量差)](#微观规律↔宏观规律总结(能量 U U U vs 自由能 F F F;概率指数依赖能量差))
      • 溶液中分子的随机动力学图像
        • [生物大分子随机模型(符号从 k B T → R T k_BT\to RT kBT→RT; F → G F\to G F→G吉布斯自由能,摩尔热力学)](#生物大分子随机模型(符号从 k B T → R T k_BT\to RT kBT→RT; F → G F\to G F→G吉布斯自由能,摩尔热力学))
        • 3组核心公式
      • 符号差异汇总
      • 整体理论逻辑链
    • 生物分子过程实例
      • 配体-受体结合
        • [1. 反应与速率常数定义](#1. 反应与速率常数定义)
        • [2. 平衡条件与解离常数 K d K_d Kd推导](#2. 平衡条件与解离常数 K d K_d Kd推导)
        • [3. 结合自由能(热力学-概率桥梁,承接玻尔兹曼)](#3. 结合自由能(热力学-概率桥梁,承接玻尔兹曼))
      • 蛋白质折叠
        • [1. 二态折叠反应](#1. 二态折叠反应)
        • [2. 平衡常数与折叠自由能](#2. 平衡常数与折叠自由能)
        • [3. 实验测定方法(变性剂梯度+停流荧光Stopped-flow)](#3. 实验测定方法(变性剂梯度+停流荧光Stopped-flow))
    • 结构生物信息学统一纲领(收尾逻辑)
      • [两大永恒核心问题:采样(Sampling) + 能量(Energy/打分Score/损失Loss)](#两大永恒核心问题:采样(Sampling) + 能量(Energy/打分Score/损失Loss))
          • 一、底层物理逻辑:玻尔兹曼分布是二者的数学桥梁
          • [二、一一对应:物理能量 ↔ 打分Score / 损失Loss(结构生信&AI通用等价关系)](#二、一一对应:物理能量 ↔ 打分Score / 损失Loss(结构生信&AI通用等价关系))
            • [1. 分子对接、传统结构预测:势能=Score打分函数](#1. 分子对接、传统结构预测:势能=Score打分函数)
            • [2. 蛋白质AI结构预测:自由能=Loss损失函数](#2. 蛋白质AI结构预测:自由能=Loss损失函数)
    • 如何从统计物理的角度来理解深度学习?
  • [Notebooks 练习](#Notebooks 练习)
    • 课堂练习
    • Task
    • Report
            • [1. 把直方图 → 自由能图](#1. 把直方图 → 自由能图)
            • [2. 定义状态](#2. 定义状态)
            • [3. 计算核心物理量](#3. 计算核心物理量)
            • 第1步:把「计数」变成「概率」
            • [第2步:概率 → 自由能(核心公式)](#第2步:概率 → 自由能(核心公式))
            • 第3步:自由能归一化
            • [第4步:定义状态 → 算能量差/布居数](#第4步:定义状态 → 算能量差/布居数)

Notes 课件

从这一节课开始,我们迅速从实验理论部分转向生物分子动力学的统计力学视角,

纵观课件全文,我们只需要知道一点:

统计和力学之间是有联系的,关键在于玻尔兹曼分布,以及能量(energy)的概念,

另外核心(我个人总结)就是概率分布已经隐含了能量景观的信息。

为什么我们需要统计力学视角?

答案很简单:

  • 统计:一大群分子构成的1个复杂体系
  • 力学:分子之间相互作用与运动

生物分子系统具有三个本质特征:

  1. 可以改变自身形状(构象变化)
  2. 在三维空间中持续运动
  3. 分子间 / 分子内存在复杂相互作用

要描述这样的系统,我们需要:

  • 力学:解释分子如何运动、如何相互作用
  • 统计学:处理海量原子、海量构象的集合行为

生物分子解读:

我们永远无法追踪单个原子的精确运动轨迹,但可以通过统计方法描述构象的分布规律------ 这正是 X 射线晶体学给出平均结构、分子动力学给出构象集合的理论依据。

但是力学和统计学的观点并不是分立的,在我们的研究对象中,它们是可以交汇联系起来的,

而这个桥梁,就是能量(energy)的概念。

我们学习基础工科物理,无论是中学还是大学本科,基本上都是从运动学,深入到动力学,

先学简单的动力学,再深入刚体动力学,

而动力学的终点,基本上就是各种能量的表征和转化,

运运动学和动力学的学习终点,基本上就是用能量统一描述系统所有运动、相互作用;而统计物理,则在能量的基础上,从微观个体运动过渡到宏观集合行为,实现力学规律与统计概率的双向锚定

所以,在研究分子体系中,关键在于,如何用力学里的「能量」概念,去解释统计学观测得到的概率规律 ?

先简单回顾一下我们的统计学知识(概率论与数理统计)

这一块基本上就是本科工科数学基础知识:概率论与数理统计,

我之前也总结过一些系统的课程大纲,可以参考:概率统计baseline

概率基础:采样与直方图

1. 随机过程与采样
  • 随机(Stochastic) :事件由概率决定,通过大量观测可以得到不同结果的概率分布
  • 采样(Sampling):通过多次观测统计结果,用直方图估计概率分布(分子动力学模拟的本质就是对构象空间的采样)
2. 绝对概率 vs 相对概率
类型 公式 含义 生物分子应用
绝对概率 p ( i ) = count ( i ) ∑ k count ( k ) p(i) = \frac{\text{count}(i)}{\sum_k \text{count}(k)} p(i)=∑kcount(k)count(i) 某一结果出现的真实概率,总和为1 某一构象在整个构象空间中出现的概率
相对概率 p ( j ) p ( i ) = count ( j ) count ( i ) \frac{p(j)}{p(i)} = \frac{\text{count}(j)}{\text{count}(i)} p(i)p(j)=count(i)count(j) 两个结果出现概率的比值 比较两个构象的稳定性(比值越大,构象j越稳定)

关键结论:很多时候我们只需要相对概率就能比较构象稳定性,这大大降低了计算难度。


概率分布类型

1. 离散均匀分布(公平骰子)
  • 每个结果概率相等: p ( j ) = 1 / 6 p(j)=1/6 p(j)=1/6( j = 1 ∼ 6 j=1\sim6 j=1∼6)
  • 归一化条件: ∑ j = 1 6 p ( j ) = 1 \sum_{j=1}^6 p(j)=1 ∑j=16p(j)=1(所有可能结果的概率总和为100%)
  • 对应分子:理想无相互作用的气体分子
2. 离散有偏分布(作弊骰子)
  • 某一结果概率更高,对应能量上更有利的状态
  • 对应分子:蛋白质的优势构象(晶体结构就是概率最高的那个构象)
3. 连续概率分布(高斯分布)
  • 高斯分布公式: ρ G ( x ) = 1 2 π σ e − ( x − ⟨ x ⟩ ) 2 2 σ 2 \rho_G(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\langle x\rangle)^2}{2\sigma^2}} ρG(x)=2π σ1e−2σ2(x−⟨x⟩)2
  • 连续分布用概率密度描述,概率等于密度乘以区间长度
  • 对应分子:原子的热振动、分子的布朗运动

核心统计量

统计量 公式 物理意义
均值(平均值) ⟨ f ⟩ = 1 N ∑ i = 1 N f ( x i ) \langle f\rangle = \frac{1}{N}\sum_{i=1}^N f(x_i) ⟨f⟩=N1∑i=1Nf(xi) 分布的中心位置,对应分子的平均构象
方差/标准差 σ 2 = 1 N − 1 ∑ i = 1 N ( f ( x i ) − ⟨ f ⟩ ) 2 \sigma^2 = \frac{1}{N-1}\sum_{i=1}^N (f(x_i)-\langle f\rangle)^2 σ2=N−11∑i=1N(f(xi)−⟨f⟩)2 分布的宽度,对应分子构象的波动幅度(柔性)
均值标准误 Std-err = σ N \text{Std-err} = \frac{\sigma}{\sqrt{N}} Std-err=N σ 均值估计的准确度,采样数N越大,标准误越小,结果越可靠

分子动力学关键:增加模拟时间(模拟时间直接影响采样数目,增大N)可以降低标准误,提高构象平均的准确性


多维概率分布

1. 投影(边缘分布)
  • 二维分布归一化: ∫ ρ ( x , y ) d x d y = 1 \int \rho(x,y)dxdy=1 ∫ρ(x,y)dxdy=1
  • 投影到x轴: ρ ( x ) = ∫ ρ ( x , y ) d y \rho(x) = \int \rho(x,y)dy ρ(x)=∫ρ(x,y)dy(忽略y变量,只看x的分布)
  • 对应分子:分析蛋白质某一残基的二面角分布,忽略其他残基的影响
2. 相关性
  • 独立变量: ρ ( x , y ) = ρ ( x ) ρ ( y ) \rho(x,y)=\rho(x)\rho(y) ρ(x,y)=ρ(x)ρ(y),此时 ⟨ x y ⟩ = ⟨ x ⟩ ⟨ y ⟩ \langle xy\rangle=\langle x\rangle\langle y\rangle ⟨xy⟩=⟨x⟩⟨y⟩
  • 相关条件: ⟨ x y ⟩ − ⟨ x ⟩ ⟨ y ⟩ ≠ 0 \langle xy\rangle - \langle x\rangle\langle y\rangle \neq 0 ⟨xy⟩−⟨x⟩⟨y⟩=0
  • 皮尔逊相关系数: r = ⟨ x y ⟩ − ⟨ x ⟩ ⟨ y ⟩ σ x σ y r = \frac{\langle xy\rangle - \langle x\rangle\langle y\rangle}{\sigma_x\sigma_y} r=σxσy⟨xy⟩−⟨x⟩⟨y⟩(取值-1~1,衡量线性相关程度)

生物分子应用:分析蛋白质两个结构域的运动相关性,判断它们是否协同运动。

这里再放一点推导:

协方差这一块的话

简单来说,就是分布已知,所以确定性的积分能积出来1个确定性的值

然后再依据皮尔逊相关系数的统计定义去计算

数据类型 r取值范围 分子力学实例
(a) 左 线性正相关 0<r<1 蛋白相邻二面角协同同向扭曲
(b) 中 非线性相关 r≈0 二次势能耦合,无线性关联、但有非线性关联(⚠️ 皮尔逊只测线性,非线性相关r趋近 0)
© 右 无相关 r≈0 空间相隔很远的两个残基,无相互作用

核心桥梁:玻尔兹曼分布

什么是玻尔兹曼分布?

在1个构象空间中,观察到某个构象的概率,用玻尔兹曼分布来描述。

我们参考维基百科:https://zh.wikipedia.org/wiki/玻尔兹曼分布

基本上只有两个概念:

  • 玻尔兹曼分布:1个系统处于某种状态state i的概率,仅与其能量和温度有关(可以顺手简单写出来1个方程式)
  • 玻尔兹曼因子:1个系统处于两种状态state的概率比,只与状态的能量差有关

归一化,也就是分母的系数(配分函数Z或Q),是不是看上去和softmax形式很像,

其实softmax和玻尔兹曼分布是可以联系起来的

玻尔兹曼分布与softmax的关联

本质上还是理解概率分布与能量、温度的关系。

想要深究有很多文献资料可以查阅,此处仅援引几篇高质量博客参考:

https://zhuanlan.zhihu.com/p/286724281

玻尔兹曼分布:系统处于某个能量状态i的概率 = 系统中处于能量状态i的粒子数目比例

热平衡的正则系统中,单个粒子处于能量状态 **i**的概率,等于系统内处在该能级的粒子数占总粒子数的比例。

我们先来理一下玻尔兹曼分布的推导:

  • 原始的定义是从物理现象也就是实验中总结归纳出来的,也就是从分子碰撞、气体实验中总结出来的经验分布规律。这个时候就是先发现指数形式的分布结果(对应我们现成的理解的玻尔兹曼分布公式),不知道它的来源是微观状态最大化
  • 后来补上了理论基石:也就是玻尔兹曼熵公式,S=kInW(熵是微观状态数的对数),这个时候才是热力学第二定律(孤立系统熵自发增大)打通了和宏观(熵)和微观(微观状态数)
  • 然后我们现在理解的话,是反过来,先知道 约束+最大化微观状态------》推导分布公式,这样便于我们的理解

所以我们从理论上来推导玻尔兹曼分布公式的话,就是得先知道结果的物理意义:

我们先约束分子内能总和不变、粒子总数目不变,然后要求这个分布使得微观状态数目W最大化(最概然分布,也就是我们直接使用玻尔兹曼熵的结果,直接套用热力学第二定律的自然推导)。

那么这个时候就可以正式开始推导了,

我们的目标优化函数就是微观状态数,所以我们可以先写1个微观状态数W的函数,

假设N个粒子、K个能量状态,

也就是将N个粒子分配到K个能级,有多少种排列组合方法,这就是微观状态数W(简单记忆就是熵体现在组合上)。而这是1个经典的高中隔板排列组合问题,如何将N个小球分到K个盒子中,也就是用K-1个隔板来划分这N个球。

这里能量状态数、和微观状态数还是要区分一下。

推导如下:

  • 构造微观状态数函数(目标优化函数)
  • 优化形式:拉格朗日法

这里的目标优化函数是W,然后两个约束条件(粒子数固定、系统内容固定)

  • 对拉格朗日函数的进一步简化

这里L函数的简化很简单,去掉不相关项

然后我们自变量其实有两个 引入约束项的系数、每一个微观状态数,

然后就是求偏导求极值,

我们只以其中1个自变量(微观状态数1:第1个能量级的微观状态数目)为例

形式上也很简单,就是去除不相关的变量

然后两个多项式求导其实挺简单的,主要是对数阶乘那个复合式子比较麻烦,

在上述展示推理中其实还是用近似(用来1个斯特林近似,就是涉及到大数阶乘n!的近似计算,因为每一个能量状态的微观粒子数目很多,基本上设计到微观体系数目量级都非常大),将其展开为多项式。

python 复制代码
lnx!≈xlnx−x
x 很大时适用,统计物理求玻尔兹曼熵最常用。

然后其他的自变量同样可以求偏导数

然后分母的式子我们就也能够理解了

这个时候,我们再回到前面维基百科中的讨论:

玻尔兹曼分布是使熵最大化的分布,我们前面的推导就是利用了玻尔兹曼熵的公式(熵正比于微观状态数目),

所以我们用"使微观状态数最大化"的策略来推导粒子处于某一个状态的数目公式,也就是玻尔兹曼分布公式。

统计与力学的连接:玻尔兹曼分布

经过前面的简单介绍,我们基本上理解了玻尔兹曼分布的理论。

课件这里给出的公式稍微复杂了一点,就是我们考虑到一个体系处于某种状态时的概率密度函数,要从多维联合分布的角度去考虑,

比如说分子处于某一个构象,这个构象的位置、势能,和x有关;这个构象的速度、动能,和v有关。

那么这个状态的概率密度函数,其实就是x和v的联合概率密度函数,

左边的这个p我们可以拆解成多元分布,那么右边的这个e指数上的E,我们也可以将一个体系的内容拆解成势能和动能,

左边的状态概率密度函数中x、v是独立的,右边的E=势能+动能,也是解耦独立的,

然后我们再分别进行积分,就能够求得边缘分布的形式。

同理

这里稍微提一下的就是,在物理直觉上理解一下变量之间的独立

具体的推导形式要更严格一点,我们都是简单的过渡。

最终,也就是结果:

1.核心公式来源:相空间概率拆分

ρ ( x , v ) ∝ exp ⁡ − E ( x , v ) k B T = exp ⁡ ( − U ( x ) k B T ) ⋅ exp ⁡ ( − K ( v ) k B T ) \rho(x,v)\propto \exp\left-\\frac{E(x,v)}{k_BT}\\right=\exp\left(-\frac{U(x)}{k_BT}\right)\cdot\exp\left(-\frac{K(v)}{k_BT}\right) ρ(x,v)∝exp−kBTE(x,v)=exp(−kBTU(x))⋅exp(−kBTK(v))

  • E ( x , v ) = U ( x ) + K ( v ) E(x,v)=U(x)+K(v) E(x,v)=U(x)+K(v):分子总能量=构型势能 U ( x ) U(x) U(x)(位置 x x x决定,分子构象、化学键空间排布)+动能 K ( v ) = 1 2 m v 2 K(v)=\tfrac12mv^2 K(v)=21mv2**(速度** v v v决定)
  • 数学上:指数乘积 = 两个独立变量的概率密度乘积 ρ ( x , v ) = ρ ( x ) ⋅ ρ ( v ) \boldsymbol{\rho(x,v)=\rho(x)\cdot\rho(v)} ρ(x,v)=ρ(x)⋅ρ(v),因此位置(构象)、速度两个随机变量统计独立
  • ρ ( ⋅ ) ∝ exp ⁡ ( − ... / k B T ) \rho(\cdot)\propto\exp(-\dots/k_BT) ρ(⋅)∝exp(−.../kBT):玻尔兹曼权重(Boltzmann factor) ,正比符号 ∝ \propto ∝是因为需要配分函数归一化(后面自由能公式补齐归一)
2. 拆分后两个边缘分布
  1. 构象分布(只关心分子空间构型,生物/大分子常用):

ρ ( x ) ∝ exp ⁡ ( − U ( x ) k B T ) \boldsymbol{\rho(x)\propto \exp\left(-\frac{U(x)}{k_BT}\right)} ρ(x)∝exp(−kBTU(x))

  1. 忽略速度:速度积分是高斯积分 ∫ exp ⁡ ( − m v 2 / 2 k B T ) d v \int \exp(-mv^2/2k_BT)dv ∫exp(−mv2/2kBT)dv是常数,归一化时被吸收,平衡构象概率只由势能 U ( x ) U(x) U(x)决定
  2. 速度分布:麦克斯韦速率分布,高斯型 ρ ( v ) ∝ exp ⁡ ( − 1 2 m v 2 / k B T ) \rho(v)\propto \exp\left(-\tfrac{1}{2}mv^2/k_BT\right) ρ(v)∝exp(−21mv2/kBT),热运动速度高斯分布。

注意:参考正态分布/高斯分布的基础知识, https://zh.wikipedia.org/wiki/正态分布

其实动能式子带入进去之后,我们现在的这个构象速度状态分布的概率密度,就很像正态分布/高斯分布的形式

然后高斯分布积分其实比较容易计算,这就是为什么我们一般是直接对速度变量进行边缘分布积分,因为运算好积;

如果对位置积分的话,比较难积,可能需要数值分析之类。

符号备注: k B k_B kB玻尔兹曼常数(单分子尺度,微观体系),后面出现 R R R气体常数 R = N A k B R=N_Ak_B R=NAkB(摩尔尺度,宏观热力学)是同一物理本质的尺度换算符号差异


总而言之,玻尔兹曼分布给出了分子处于某一构象(我们容易积分v,一般只考虑x)的概率:

ρ ( x ) ∝ exp ⁡ ( − U ( x ) k B T ) \rho(x) \propto \exp\left(-\frac{U(x)}{k_B T}\right) ρ(x)∝exp(−kBTU(x))

  • U ( x ) U(x) U(x):构象x的势能
  • k B k_B kB:玻尔兹曼常数
  • T T T:绝对温度
1. 关键结论
  1. 能量越低,概率越高:低能构象是优势构象,这就是为什么蛋白质会折叠成特定的天然结构
  2. 构象与速度独立:速度分布是高斯分布,不影响构象分布,因此我们可以只关注构象的势能分布
  3. 温度影响分布:温度越高,高能构象的概率越大,分子的柔性越强
2. 分子动力学意义

所有分子动力学模拟的最终目的,就是按照玻尔兹曼分布采样构象空间,从而得到分子的热力学性质和动力学行为。

各态历经性(Ergodicity)/遍历性

参考:https://zh.wikipedia.org/wiki/%E9%81%8D%E6%AD%B7%E6%80%A7_(%E4%BF%A1%E8%99%9F%E8%99%95%E7%90%86)

另外参考:https://zh.wikipedia.org/wiki/遍历理论

这个概念,学过随机过程,或者类似衍生应用课程(比如说通信原理)的人应该不陌生。

此处我做1个最直观的总结(仅用于理解,不一定严谨):遍历,字面意思就是每一个状态都历经过。什么叫遍历性,就是指统计结果在时间和空间上的统一性,表现为时间均值等于空间均值。

同样的,我给出1个也是非常直观的例子:

要得出一个城市A、B两座公园哪一个更受欢迎,有两种办法:

● 第一种办法:在一定的时间段考察两个公园(在空间上考察)的人数,人数多的为更受欢迎公园;

● 第二种办法:随机选择一名市民,跟踪足够长的时间(在时间上考察)来统计他去两个公园的次数,去得多的为更受欢迎公园。

一个是空间均值,一个是时间均值,如果这两个结果始终一致,则表现为遍历性。

再次借用一些经典大学物理热力学中的气体分子假想实验就是:

  • 一个密闭容器,只要气体分子足够多,那么容器中的每一点都会被气体分子经过(空间平均)
  • 对于单个气体分子,只要时间足够多,那么它也能够经过容器中的每一点(时间平均)

所以,物理学家一般会用一群气体分子的平均特性(空间平均),来预测单个气体分子特性(时间平均)。

也就是假设这个体系是满足遍历性的,我们用统计手段研究一群分子,就可以运用迁移到1个分子的运动规律上。

python 复制代码
这个概念最早来自统计力学。 统计力学运用的是经典力学和量子力学的原理。 
一个粒子运动,可以按照牛顿力学方法,计算它的运动速度、轨迹等。 
但如果是大量的粒子,就很难计算,只能用统计方法计算,即概率论的方法计算。 
物理学家玻尔兹曼和吉布斯假设一个密闭容器,里面有气体分子在运动,
他们不断的相互碰撞,并和容器壁碰撞,每碰撞一次,它们的运动状态就改变一次。 
如果气体分子足够多,碰撞的时间足够长,那么这个密闭容器中的每一点都会被气体分子经过。
一个单独的气体分子,随着时间的流逝,也会造访容器中的每一点,
物理学家们就可以通过使用一群气体分子的平均特性,来预测单个气体分子的特性了。 
所以,遍历性的学术性解释是统计结果在时间和空间上的统一性,表现为时间均值等于空间均值。

总结就是,各态历经性是统计力学的核心假设,架起时间平均↔空间平均(以后我们称呼ensemble为系综,系综平均)

  1. 时间平均(单分子长时间演化) :单个分子在溶剂碰撞(热扰动)下,随时间随机遍历全部可能构象,在某构象停留的时间占比 = 玻尔兹曼概率ρ(x);------》恒温条件下,单个分子因与溶剂分子发生碰撞,会随机转变为所有可能的构象;各类构象的占据占比由体系能量与温度(分子和环境的相互作用)决定。
  2. 系综平均(瞬间快照大量全同分子):同一温度 / 体积 / 粒子数条件下,无穷多复制分子瞬间抓拍,处在某构象的分子数占比 = 同样ρ(x)。------》若在某一时刻暂停大量相同条件下的等同体系演化过程,抓拍得到的构象分布同样遵循上述统计规律。

上述两种情形下收集得到的全部构象(即取样结果)统称为构象系综(conformational ensemble,我有时候喜欢翻译为构象集合)。该系综的首要特征由取样时的环境条件决定(恒温、恒压或恒容、固定粒子数等)。

  • 系综 (ensemble):满足固定T,V,N(NVT 正则系综,本 PPT 使用)的全部构象集合;由约束条件(恒温 / 恒压 / 恒粒子数)区分系综类型。
python 复制代码
一、遍历性(Ergodicity):分子动力学模拟的核心假设
核心翻译与解读
时间平均:恒温下,单个分子因与溶剂碰撞会随机遍历所有可能构象,每个构象的布居度由能量和温度决定(遵循玻尔兹曼分布)。
系综平均:同一时刻,大量相同条件下的独立系统,其构象分布与单个分子长时间的构象分布完全一致。
关键结论:遍历性假设让我们可以用单个分子的长时间模拟(时间平均)代替大量分子的瞬时观测(系综平均),这是分子动力学模拟能够预测宏观性质的理论基础。
系综(Ensemble)定义
构象的集合称为系综,由其所处的热力学条件唯一确定:
NVT 系综:粒子数 (N)、体积 (V)、温度 (T) 恒定
NPT 系综:粒子数 (N)、压强 (P)、温度 (T) 恒定(最接近生物体内环境)

自由能:宏观态的有效能量

自由能 F i F_i Fi定义:从微观势能 U ( x ) → U(x)\to U(x)→宏观状态有效能(微观态积分粗粒化)
1. 微观态 vs 宏观态(State)
  • 微观态 :单个精确构型 x x x,能量 U ( x ) U(x) U(x);
  • 宏观态A/B同一势能阱内全部微观构型的集合(1D势能曲线两个势阱A、B),宏观态是大量微观态的打包。
2. 宏观态占据概率(积分玻尔兹曼权重)

p A = ∫ V A ρ ( x ) d x ∝ ∫ V A exp ⁡ ( − U ( x ) k B T ) d x , p B = ∫ V B exp ⁡ ( − U ( x ) k B T ) d x p_A=\int_{V_A}\rho(x)dx \propto \int_{V_A}\exp\left(-\frac{U(x)}{k_BT}\right)dx,\quad p_B=\int_{V_B}\exp\left(-\frac{U(x)}{k_BT}\right)dx pA=∫VAρ(x)dx∝∫VAexp(−kBTU(x))dx,pB=∫VBexp(−kBTU(x))dx

V A / V B V_A/V_B VA/VB:宏观态A/B对应的构象坐标区间(势阱定义域),宏观概率=阱内所有微观玻尔兹曼权重积分

3. 自由能定义式(关键公式)

p A p B = ∫ V A e − U / k B T d x ∫ V B e − U / k B T d x ≡ e − F A / k B T e − F B / k B T    ⟹    F i = − k B T ln ⁡ ( ∫ V i exp ⁡ ( − U ( x ) k B T ) d x ) \frac{p_A}{p_B}=\frac{\int_{V_A}e^{-U/k_BT}dx}{\int_{V_B}e^{-U/k_BT}dx}\equiv \frac{e^{-F_A/k_BT}}{e^{-F_B/k_BT}} \implies \boldsymbol{F_i=-k_BT\ln\left(\int_{V_i}\exp\left(-\frac{U(x)}{k_BT}\right)dx\right)} pBpA=∫VBe−U/kBTdx∫VAe−U/kBTdx≡e−FB/kBTe−FA/kBT⟹Fi=−kBTln(∫Viexp(−kBTU(x))dx)

指数上的这个空间积分比较难算,所以直接把这些构象空间Va、Vb庞大的积分结果打包成1个宏观的热力学量,也就是自由能Fi

  • 物理意义:自由能 F i F_i Fi是宏观态的等效能量 :不用逐个算无穷多微观 U ( x ) U(x) U(x),只用一个等效 F i F_i Fi就能用玻尔兹曼公式直接写宏观态概率;
  • 对数+积分项本质:积分 ∫ e − U / k B T d x = Z i \int e^{-U/k_BT}dx=Z_i ∫e−U/kBTdx=Zi是子配分函数 , F = − k B T ln ⁡ Z F=-k_BT\ln Z F=−kBTlnZ是正则系综亥姆霍兹自由能标准定义;
  • 熵隐藏在积分里:积分越大→同一势阱内微观构象数目越多(简并度大,熵高)→ F F F越小(自由能=内能-TS,熵大自由能更低)。
1. 状态(State)的定义

状态是属于同一势能谷的所有微观构象的集合。例如,蛋白质的"折叠态"和"去折叠态"就是两个不同的宏观态,每个态包含天文数字级别的微观构象。

2. 自由能与概率的关系

对于一维势能面中的两个状态A和B:

  • 状态A的概率: p A = ∫ V A ρ ( x ) d x ∝ ∫ V A exp ⁡ ( − U ( x ) k B T ) d x p_A = \int_{V_A} \rho(x)dx \propto \int_{V_A} \exp\left(-\frac{U(x)}{k_B T}\right)dx pA=∫VAρ(x)dx∝∫VAexp(−kBTU(x))dx
  • 状态B的概率: p B = ∫ V B ρ ( x ) d x ∝ ∫ V B exp ⁡ ( − U ( x ) k B T ) d x p_B = \int_{V_B} \rho(x)dx \propto \int_{V_B} \exp\left(-\frac{U(x)}{k_B T}\right)dx pB=∫VBρ(x)dx∝∫VBexp(−kBTU(x))dx

自由能是宏观态的"有效能量",它将一个态的所有微观构象的能量整合为一个单一数值:

p A p B = exp ⁡ ( − F A k B T ) exp ⁡ ( − F B k B T ) \frac{p_A}{p_B} = \frac{\exp\left(-\frac{F_A}{k_B T}\right)}{\exp\left(-\frac{F_B}{k_B T}\right)} pBpA=exp(−kBTFB)exp(−kBTFA)

F i = − k B T ln ⁡ ( ∫ V i exp ⁡ ( − U ( x ) k B T ) d x ) F_i = -k_B T \ln\left(\int_{V_i} \exp\left(-\frac{U(x)}{k_B T}\right)dx\right) Fi=−kBTln(∫Viexp(−kBTU(x))dx)

核心区别

  • 势能 U ( x ) U(x) U(x):单个微观构象的能量
  • 自由能 F i F_i Fi:整个宏观态的有效能量,包含了熵的贡献(即该态包含的微观构象数目)

能量 - 概率 - 时间的统一关系

1. 微观与宏观的分野
尺度 主导量 关系
微观过程 势能U 两个微观态的相对概率与它们的势能差呈指数关系
宏观过程 自由能F 两个宏观态的相对概率与它们的自由能差呈指数关系
2. 时间尺度与自由能垒

宏观过程的平均发生时间由分隔两个态的自由能垒高度决定:能垒越高,过程越慢。这就是为什么有些蛋白质折叠需要微秒级,而有些需要毫秒甚至秒级。

微观规律↔宏观规律总结(能量 U U U vs 自由能 F F F;概率指数依赖能量差)
  1. 微观过程(单构型间跃迁) :两个微观态 x 1 , x 2 x_1,x_2 x1,x2,相对概率 p ( x 1 ) p ( x 2 ) ∝ exp ⁡ ( − U 1 − U 2 k B T ) \displaystyle \frac{p(x_1)}{p(x_2)}\propto\exp\left(-\frac{U_1-U_2}{k_BT}\right) p(x2)p(x1)∝exp(−kBTU1−U2),由势能差 Δ U ΔU ΔU控制;
  2. 宏观过程(A/B宏观态跃迁) :两个宏观态, p A p B ∝ exp ⁡ ( − F A − F B k B T ) \displaystyle \frac{p_A}{p_B}\propto\exp\left(-\frac{F_A-F_B}{k_BT}\right) pBpA∝exp(−kBTFA−FB),由自由能差 Δ F ΔF ΔF控制;

宏观态包含大量微观态,熵(微观态数目)被整合进自由能 F F F,所以宏观不再用原始势能 U U U,改用粗粒化自由能 F F F;

  1. 动力学:跃迁时间和自由能势垒 :宏观转变的平均等待时间 τ ∝ exp ⁡ ( F ‡ − F state k B T ) \tau\propto\exp\left(\frac{F^\ddagger-F_\text{state}}{k_BT}\right) τ∝exp(kBTF‡−Fstate)(阿伦尼乌斯规律),势垒 F ‡ F^\ddagger F‡越高,跨越越慢、时间越长。

溶液中分子的随机动力学图像

  1. 宏观态布居 : p i ∝ exp ⁡ ( − G i R T ) p_i \propto \exp\left(-\frac{G_i}{RT}\right) pi∝exp(−RTGi)( G 为吉布斯自由能, 为吉布斯自由能, 为吉布斯自由能,R为气体常数)
  2. 态间交换速率 : k i j = k 0 exp ⁡ ( − G i j ‡ R T ) k_{ij} = k_0 \exp\left(-\frac{G_{ij}^\ddagger}{RT}\right) kij=k0exp(−RTGij‡)(阿伦尼乌斯方程, G i j ‡ G_{ij}^\ddagger Gij‡为从态i到态j的自由能垒)
  3. 平均观测值:平衡态实验测量的是所有态的加权平均

⟨ O ⟩ = ∑ i p i O i = ∑ i O i exp ⁡ ( − G i R T ) ∑ i exp ⁡ ( − G i R T ) \langle O \rangle = \sum_i p_i O_i = \frac{\sum_i O_i \exp\left(-\frac{G_i}{RT}\right)}{\sum_i \exp\left(-\frac{G_i}{RT}\right)} ⟨O⟩=∑ipiOi=∑iexp(−RTGi)∑iOiexp(−RTGi)

所有这些过程的能量来源都是热能,即分子与水分子的随机碰撞。


生物大分子随机模型(符号从 k B T → R T k_BT\to RT kBT→RT; F → G F\to G F→G吉布斯自由能,摩尔热力学)

符号变更说明(最关键差异:单分子 k B k_B kB ↔ 摩尔量 R R R; F F F亥姆霍兹→ G G G吉布斯)

  • R T = N A k B T RT=N_Ak_BT RT=NAkBT: R R R气体常数(1mol分子尺度,生化常用摩尔热力学), k B k_B kB单分子玻尔常数;
  • G i G_i Gi:吉布斯自由能(恒压条件 N P T NPT NPT**,溶液生化实验恒压)** ,前面 F F F是恒容亥姆霍兹自由能;实验溶液大多常压,因此换成 G G G,公式形式完全不变,只是常数替换: F = − k B T ln ⁡ Z → G = − R T ln ⁡ Z F=-k_BT\ln Z \to G=-RT\ln Z F=−kBTlnZ→G=−RTlnZ。
3组核心公式
  1. 平衡布居概率(宏观态占比)

p i ∝ exp ⁡ ( − G i R T ) \boldsymbol{p_i\propto \exp\left(-\frac{G_i}{RT}\right)} pi∝exp(−RTGi)

  1. 多个构象宏观态(激活/失活等不同蛋白构象环),平衡时丰度由各自吉布斯自由能决定, G i G_i Gi越低, p i p_i pi越大;
  2. 态间跃迁速率(阿伦尼乌斯/过渡态理论)

k i j = k 0 exp ⁡ ( − G i j ‡ R T ) \boldsymbol{k_{ij}=k_0\exp\left(-\frac{G^\ddagger_{ij}}{RT}\right)} kij=k0exp(−RTGij‡)

  1. G i j ‡ G^\ddagger_{ij} Gij‡: i → j i\to j i→j跨越的过渡态自由能势垒;势垒越高,速率常数 k i j k_{ij} kij越小、转变越慢; k 0 k_0 k0是前置因子(碰撞频率,溶剂水分子热碰撞提供翻越势垒的能量);
  2. 实验可观测量系综平均

⟨ O ⟩ = ∑ i p i O i = ∑ i O i exp ⁡ ( − G i / R T ) ∑ i exp ⁡ ( − G i / R T ) \langle O\rangle=\sum_i p_i O_i=\frac{\sum_i O_i \exp(-G_i/RT)}{\sum_i \exp(-G_i/RT)} ⟨O⟩=∑ipiOi=∑iexp(−Gi/RT)∑iOiexp(−Gi/RT)

  1. 宏观实验测到的信号 ⟨ O ⟩ \langle O\rangle ⟨O⟩是所有构象态 i i i的观测值 O i O_i Oi按玻尔兹曼概率加权平均(比如NMR、荧光测蛋白平均信号,是全部构象加权结果);
  2. 微观定义回代: G i = − R T ln ⁡ ∫ exp ⁡ ( − U ( r ) R T ) δ ( i − i ( r ) ) d r \displaystyle G_i=-RT\ln\int \exp\left(-\frac{U(r)}{RT}\right)\delta(i-i(r))dr Gi=−RTln∫exp(−RTU(r))δ(i−i(r))dr
    δ \delta δ函数筛选所有属于宏观态 i i i的微观坐标 r r r,积分就是该态配分函数,和第3页 F i = − k B T ln ⁡ ∫ e − U / k B T d x F_i=-k_BT\ln\int e^{-U/k_BT}dx Fi=−kBTln∫e−U/kBTdx数学结构完全一致,仅 k B T ↔ R T 、 F ↔ G k_BT\leftrightarrow RT、F\leftrightarrow G kBT↔RT、F↔G尺度/热力学条件替换。

符号差异汇总

符号 物理含义 使用场景
k B k_B kB玻尔兹曼常数 单分子微观能量-温度关联 理论微观势能 U U U、亥姆霍兹自由能 F F F(前3页)
R R R气体常数 1摩尔分子能量-温度关联 生化宏观实验、吉布斯自由能 G G G(最后一页)
U ( x ) U(x) U(x) 微观单个构型势能 单个分子空间构象的势能(最底层微观能量)
F i F_i Fi 亥姆霍兹自由能(NVT恒容) 理论模型,恒容体系宏观态等效能
G i G_i Gi 吉布斯自由能(NPT恒压) 溶液生物实验(常压),实际测量体系
ρ ( x ) \rho(x) ρ(x) 微观构象概率密度 单分子连续坐标分布
p i p_i pi 宏观态离散占据概率 打包后的势能阱宏观态布居

整体理论逻辑链

微观势能 U ( x ) → 玻尔兹曼权重 exp ⁡ ( − U / k B T ) 微观构象分布 ρ ( x ) → 势阱内积分 ∫ d x 宏观态配分函数 → − k B T ln ⁡ ( ⋅ ) 自由能定义 F / G → exp ⁡ ( − G / R T ) 宏观态概率 p i → 势垒 跃迁速率 k i j \boldsymbol{微观势能U(x)\xrightarrow\\text{玻尔兹曼权重}{\exp(-U/k_BT)}微观构象分布\rho(x)\xrightarrow\\text{势阱内积分}{\int dx}宏观态配分函数\xrightarrow-k_BT\\ln(\\cdot){\text{自由能定义}}F/G \xrightarrow{\exp(-G/RT)}宏观态概率p_i \xrightarrow{\text{势垒}}跃迁速率k_{ij}} 微观势能U(x)exp(−U/kBT) 玻尔兹曼权重微观构象分布ρ(x)∫dx 势阱内积分宏观态配分函数自由能定义 −kBTln(⋅)F/Gexp(−G/RT) 宏观态概率pi势垒 跃迁速率kij

热运动(溶剂分子碰撞)提供能量,让分子在不同宏观构象间随机跃迁;平衡时各构象丰度由自由能决定、跃迁快慢由自由能势垒决定,全部宏观热力学行为根源都是微观势能+玻尔兹曼统计+热扰动

生物分子过程实例

配体-受体结合

1. 反应与速率常数定义

R + L ⇌ k o n k o f f R L \boldsymbol{R+L \underset{k_{off}}{\stackrel{k_{on}}{\rightleftharpoons}} RL} R+Lkoff⇌konRL

参数 物理含义 单位 微观本质
k o n k_{on} kon(结合速率) 二级结合速率, k o n R L k_{on}RL konRL=每秒生成RL复合物数目 M − 1 ⋅ s − 1 \mathrm{M^{-1}\cdot s^{-1}} M−1⋅s−1 ①配体与受体溶液碰撞;②碰撞后形成稳定复合物, k o n = k_{on}= kon=碰撞频率×结合成功概率
k o f f k_{off} koff(解离速率) 一级解离速率, k o f f R L k_{off}RL koffRL=每秒RL解离为R+L的数目 s − 1 \mathrm{s^{-1}} s−1 复合物受热扰动、打破分子间相互作用,从结合态变为游离态的频率

过量配体条件 L R L\ggR LR时, k o n L k_{on}L konL等效为伪一级结合速率( s − 1 \mathrm{s^{-1}} s−1)。

2. 平衡条件与解离常数 K d K_d Kd推导

平衡时:单位时间结合总数=解离总数

k o n R L = k o f f R L k_{on}RL=k_{off}RL konRL=koffRL

变形得到解离常数:

K d = k o f f k o n = R L R L \boldsymbol{K_d=\frac{k_{off}}{k_{on}}=\frac{RL}{RL}} Kd=konkoff=RLRL

  • C 0 = 1 M C^0=1\ \mathrm{M} C0=1 M为热力学标准浓度;
  • 概率关联: K d = C 0 ⋅ p u n b o u n d p b o u n d \displaystyle K_d=C^0\cdot\frac{p_{\mathrm{unbound}}}{p_{\mathrm{bound}}} Kd=C0⋅pboundpunbound
    p u n b o u n d p_{\mathrm{unbound}} punbound:受体游离概率; p b o u n d p_{\mathrm{bound}} pbound:受体被配体结合概率。
  • 规律: K d \boldsymbol{K_d} Kd数值越小→ p b o u n d p u n b o u n d \displaystyle\frac{p_{\mathrm{bound}}}{p_{\mathrm{unbound}}} punboundpbound越大→结合亲和力越强。
3. 结合自由能(热力学-概率桥梁,承接玻尔兹曼)

Δ G b i n d i n g = k B T ln ⁡ K d C 0 = k B T ln ⁡ ( p u n b o u n d p b o u n d ) \boldsymbol{\Delta G_{\mathrm{binding}}=k_BT\ln\frac{K_d}{C^0}=k_BT\ln\left(\frac{p_{\mathrm{unbound}}}{p_{\mathrm{bound}}}\right)} ΔGbinding=kBTlnC0Kd=kBTln(pboundpunbound)

  • Δ G < 0 \Delta G<0 ΔG<0:结合自发,结合态自由能更低、占据概率更高(玻尔兹曼分布 p ∝ e − G / k B T p\propto e^{-G/k_BT} p∝e−G/kBT);
  • 物理意义:结合自由能是把游离R+L变为结合RL所需的热力学功,直接关联宏观态概率比值

蛋白质折叠

1. 二态折叠反应

U ⇌ k f k u F \boldsymbol{U \underset{k_u}{\stackrel{k_f}{\rightleftharpoons}} F} Uku⇌kfF

U U U=去折叠无序态; F F F=天然折叠有序态

  • k f k_f kf:折叠速率( s − 1 \mathrm{s^{-1}} s−1), k f P k_fP kfP=每秒折叠成天然态分子数;
  • k u k_u ku:去折叠速率( s − 1 \mathrm{s^{-1}} s−1), k u P k_uP kuP=每秒天然态解折叠数目。
2. 平衡常数与折叠自由能

平衡: k f U = k u F k_fU=k_uF kfU=kuF

K D = k u k f , Δ G e q = R T ln ⁡ K D K_D=\frac{k_u}{k_f},\quad \boldsymbol{\Delta G_{eq}=RT\ln K_D} KD=kfku,ΔGeq=RTlnKD

Δ G e q < 0 \Delta G_{eq}<0 ΔGeq<0:天然折叠态 F F F自由能更低,平衡下天然态占比更高(概率更大)。

3. 实验测定方法(变性剂梯度+停流荧光Stopped-flow)
  1. 高浓度变性剂:蛋白全部去折叠,表观速率 k o b s = k u k_{\mathrm{obs}}=k_u kobs=ku;
  2. 低浓度变性剂:蛋白全部折叠,表观速率 k o b s = k f k_{\mathrm{obs}}=k_f kobs=kf;
  3. 改变变性剂浓度做速率曲线,外推至纯水条件,得到生理条件 k f 、 k u k_f、k_u kf、ku,进而算折叠自由能 Δ G e q \Delta G_{eq} ΔGeq;
    C m C_m Cm:折叠-去折叠各占50%的变性剂临界浓度。

结构生物信息学统一纲领(收尾逻辑)

两大永恒核心问题:采样(Sampling) + 能量(Energy/打分Score/损失Loss)

  1. 能量/打分函数 :等效统计力学里的势能 U U U,用来定量判断构象优劣(能量越低、构象热力学概率越高,对应AI里损失越小、模型越优);
  2. 采样:在庞大构象空间里,按照玻尔兹曼概率规则取样,对应MD/MC模拟采样、AI数据集采样;

全领域通用:

MD分子动力学、分子对接(Docking)、蛋白结构预测、蛋白质设计、机器学习/AI蛋白模型,全部围绕「怎么高效采样、怎么精准定义能量/打分」两个问题

统计和力学交汇的地方就在于,我们能够用力学的能量概念来解释概率分布观测到的现象,

力学中的能量,就是概率中的score、loss函数。

一、底层物理逻辑:玻尔兹曼分布是二者的数学桥梁
  1. 经典力学维度
    能量 E ( r ) E(\boldsymbol r) E(r)由分子内化学键、范德华、静电等相互作用唯一确定,是描述单个微观构象稳定性的力学标尺,只遵从受力、势能转化的力学规律。
  2. 统计学维度
    平衡体系中构象出现概率严格遵循玻尔兹曼规律:

p ( r ) ∝ exp ⁡ ( − E ( r ) k B T ) \boldsymbol{p(\boldsymbol r)\propto \exp\left(-\frac{E(\boldsymbol r)}{k_B T}\right)} p(r)∝exp(−kBTE(r))

  1. 能量越低,构象在采样、实验观测里出现的统计概率越高

我们在MD模拟、荧光实验里统计得到的构象频次分布(观测概率),全部可以反向用能量高低做解释,实现「力学量→统计观测现象」的定量闭环,这就是两门学科的交汇本质。

二、一一对应:物理能量 ↔ 打分Score / 损失Loss(结构生信&AI通用等价关系)
1. 分子对接、传统结构预测:势能=Score打分函数
  • 物理能量:原子层面真实势能 U ( r ) U(\boldsymbol r) U(r);
  • 工程化Score:简化后的经验/半经验势能,打分数值越小=等效能量越低=构象热力学概率越高
  • 对接筛选逻辑:优先保留高分(低能)构象,本质就是按玻尔兹曼概率择优采样。
2. 蛋白质AI结构预测:自由能=Loss损失函数

深度学习训练最小化Loss,等价于热力学体系趋向最小自由能;

模型生成构象的概率分布满足: p ∝ e − L o s s / T p\propto e^{-\mathrm{Loss}/T} p∝e−Loss/T,Loss越小,模型输出该构象的概率越大

本质:Score、Loss都是物理能量的抽象变形,舍弃了原子势能的精细物理参数,但完整继承了「数值越低,状态统计占比越高」的统计力学核心规则。

所有结构生物信息学方法,包括:

  • 分子动力学模拟(MD)
  • 蒙特卡洛模拟(MC)
  • 分子对接
  • 蛋白质结构预测
  • 蛋白质设计

都面临两个核心问题:

  1. 采样问题:如何高效探索巨大的构象空间
  2. 能量问题:如何准确描述构象的能量(即打分函数/损失函数)

后续课程将围绕这两个问题,介绍不同的解决策略和算法。


  1. 微观单构象:势能 U → 玻尔兹曼 p ∝ e − U / k B T U\xrightarrow{\mathrm{玻尔兹曼}}p\propto e^{-U/k_BT} U玻尔兹曼 p∝e−U/kBT(单点构象概率)
  2. 宏观多构象态:自由能 F → 自由能公式 p m a c r o ∝ e − F / k B T F\xrightarrow{\mathrm{自由能公式}}p_{\mathrm{macro}}\propto e^{-F/k_BT} F自由能公式 pmacro∝e−F/kBT(折叠/结合宏观态概率)
  3. 动力学层面:速率 k ∝ e − G ‡ / k B T k\propto e^{-G^\ddagger/k_BT} k∝e−G‡/kBT(能垒决定反应快慢, k o f f / k o n 、 k u / k f k_{off}/k_{on}、k_u/k_f koff/kon、ku/kf)
  4. 实验/计算:通过 k k k测 K d / K D K_d/K_D Kd/KD→反推自由能 Δ G \Delta G ΔG,用MD/AI采样验证概率分布。

如何从统计物理的角度来理解深度学习?

这其实是一个非常艰深的领域,也是一个非常重要、复杂的问题。

前面我们关于玻尔兹曼分布和softmax联系的简单讨论其实已经有一点点韵味在里面了,

总而言之,物理直觉、物理类比,以及很多物理可解释性,将会越来越重要。

这里推荐一篇很棒的总结性推文:https://github.com/datawhalechina/Path2AGI/blob/main/24-statistical-physics.md

对关于统计物理和AI的理论关联感兴趣的强烈建议去阅读一下,对于AI的底层理解能够拔高1个层次!

建议仅作为深入研学的起点,相关学习依然需要系统性阅读文献。

主要是介绍了统计物理对 AI/AGI 发展的核心贡献,提供了理解分布、能量、熵、自由能和不可逆过程的统一语言,为能量模型、变分推断、扩散模型等方法提供了理论启发。

Notebooks 练习

课堂练习

  1. 如何计算随机过程的平均结果?
    对大量独立观测值取算术平均: ⟨ f ⟩ = 1 N ∑ i = 1 N f ( x i ) \langle f\rangle = \frac{1}{N}\sum_{i=1}^N f(x_i) ⟨f⟩=N1∑i=1Nf(xi)
  2. 标准差和均值标准误的区别是什么?
    • 标准差 σ \sigma σ:描述分布本身的宽度,反映数据的离散程度
    • 均值标准误 Std-err = σ / N \text{Std-err} = \sigma/\sqrt{N} Std-err=σ/N :描述均值估计的准确度,反映多次测量均值的离散程度
  3. 过程平均值的概率分布是什么?
    根据中心极限定理,无论原分布是什么,平均值的分布都趋近于高斯分布。
  4. 事件的绝对概率和相对概率的区别是什么?
    • 绝对概率:事件发生的真实概率,总和为1
    • 相对概率:两个事件发生概率的比值,不需要知道所有可能结果
  5. 宏观态的概率与其自由能的关系是什么?
    宏观态的概率与自由能呈指数关系: p i ∝ exp ⁡ ( − G i R T ) p_i \propto \exp\left(-\frac{G_i}{RT}\right) pi∝exp(−RTGi),自由能越低,概率越高。
  6. 构象的概率与其能量的关系是什么?
    微观构象的概率与势能呈指数关系: ρ ( x ) ∝ exp ⁡ ( − U ( x ) k B T ) \rho(x) \propto \exp\left(-\frac{U(x)}{k_B T}\right) ρ(x)∝exp(−kBTU(x)),势能越低,概率越高。
  7. 过程的自由能变化是什么?
    过程的自由能变化等于终态自由能减去初态自由能: Δ G = G final − G initial \Delta G = G_{\text{final}} - G_{\text{initial}} ΔG=Gfinal−Ginitial,决定了过程的自发方向( Δ G < 0 \Delta G<0 ΔG<0自发)。

Task

课后练习参考:https://github.com/carlocamilloni/Structural-Bioinformatics/blob/main/Notebooks/t02_intro_stat.ipynb

前半部分介绍colab的用法,参考cheatsheet:https://towardsdatascience.com/cheat-sheet-for-google-colab-63853778c093/

一个比较常用的技巧,在cell中执行shell命令

markdown 复制代码
# 1. 使用magic command
%ls

# 2. 使用 %%bash
%%bash
ls

这种写法下需要注意,bash和python语法不能够混用,

如果注释写第1行,cell会认为这是1个python code,就不能够执行shell脚本了,

所以建议将注释移动到 (%%bash)符合下面

练习部分主要是到pdb数据库下载1个pdb结构文件,然后进行简单的统计分析,

由于比较简单,几分钟过一下code

markdown 复制代码
#Download a structure from the PDB:
import urllib.request
urllib.request.urlretrieve('http://files.rcsb.org/download/7tjh.pdb', '7tjh.txt')
# here we change the extension of the file from .pdb to .txt so that the computer immediately understand that is a text file

测试Ala丙氨酸

其中具有CA也就是α-C的原子,

总之我们可以看到,这个7tjh结构中大概有134个Ala的α-C原子,也就是大概有134个Ala

然后注意cell全局shell用(%%bash),局部混用用magic command即可;

另外需要注意的是 !命令返回的是1个列表list,

类型是IPython.utils.text.SList

而且注意是字符串列表,文本格式,不是数字

现在我们确定了Ala的数目

markdown 复制代码
tmp=!grep ALA 7tjh.txt | grep CA | wc -l
aa_count[0]=tmp[0]
aa_names[0]="ALA"
print(aa_names)
print(aa_count)

来个循环,

markdown 复制代码
#we can iterate this operation on some amino acids:
k=0
for i in 'ALA', 'CYS', 'GLY':
  print(i)
  !grep $i 7tjh.txt | grep CA | wc -l
  tmp=!grep $i 7tjh.txt | grep CA | wc -l
  aa_names[k]=i
  aa_count[k]=tmp[0]
  k+=1

print(aa_names)
print(aa_count)

同理,对核酸进行统计,比如说 DNA

然后是一些简单的统计分析,

用最新的numpy随机数生成函数,

python 复制代码
# 随机数生成器
rng = np.random.default_rng()

# 带固定随机数种子
rng = np.random.default_rng(seed=42)  
# 然后rng.函数方法

频数归一化成离散的概率密度(两种写法等价)

均值与标准差

然后是样本标准误,是标准差/(样本数-1)

标准误 = 平均值分布的宽度 , 代表平均值估计的精度(越小越准)

用骰子模拟蛋白荧光读数:单个蛋白荧光 1~6,num_throw=10 = 10 个蛋白为 1 组样本,每组取均值;重复num_rep=1000组独立实验,收集 1000 个组均值存入数组,直观演示实验观测值常本身就是平均值。

生物实验里仪器测出的荧光数值,不是单个蛋白信号,而是多个蛋白信号的平均;代码用骰子等价蛋白信号,批量求平均复刻真实实验读数特征;后续这 1000 个均值的分布会趋近正态分布(中心极限定理)。

中心极限定理就不过多解释了, 不管原始数据是什么分布(均匀、奇怪、乱七八糟), 只要你多次取「平均值」,这些平均值最终一定会变成正态分布(钟形曲线)。

这里大概是在讲我们湿实验测量指标的问题,宏观上其实测量大量分子的平均信号,

然后大量测量的话,得到的这个信号这个表征,其分布必然是正态分布

为什么实验里测到的 "平均值",天然就是正态分布!

然后是二维分布

Report

对二维数据

plt.hist2d函数

后面这两个提问是不是很摸不着头脑?

我们只有1个二维的分布数据,也就是1个二维的坐标点的长长的lsit/数组,我们只能简单地了解其统计学意义,

做一个简单的二维统计分布,就像前面的分析那样?

但是我们甚至不清楚这些数据的物理意义、物理背景,我们如何联系这里的energy意义?

是不是感觉牛头不对马嘴,完全木有意义?

关键点还是在于前面 统计物理与 概率统计的联系,

也就是概率密度分布已经隐含了能量景观的信息,以及玻尔兹曼分布的公式(能量与概率的关系,我们这里的突破口就是概率,那么我们就能够从概率视角转移到能量视角)。

python 复制代码
问题是什么,如何理解?

把二维分布直方图 → 转换成 常温(300K)自由能(Free Energy)图,并手动定义两个状态,计算:
✅ 状态的相对布居数(Population)
✅ 状态间的自由能差(ΔΔG)
✅ 绘制专业的自由能等高线 / 热力图

⚠️ 下面的分析不一定对,因为没有标准答案,我只提供我个人的一点思考:

  1. 自由能的本质是「偏好性」
    不用测能量,只要看体系喜欢待在哪里(点数多少),就能反推能量。
  2. 玻尔兹曼分布是通用法则
    不管是骰子、蛋白质、原子、实验数据,只要有统计分布,就能算自由能
  3. 我们的二维数组 = 分布的数字化表达
    它不是普通数字,它记录了数据在平面上的分布规律,这就是自由能的全部信息。

根据玻尔兹曼分布概率分布 自由能直接换算:

G = − k B T ⋅ ln ⁡ ( P ) \boldsymbol{G = -k_BT \cdot \ln(P)} G=−kBT⋅ln(P)

  • P P P = 该区域的样本布居数(概率)
  • k B T k_BT kBT ≈ 2.479 kJ/mol(常温 300K)
  • 自由能越低,代表该区域越稳定

自由能图 + 状态定义 + 自由能差计算

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# --------------------------
# 1. 基础参数(常温 300K)
# --------------------------
kBT = 2.479  # 单位:kJ/mol,玻尔兹曼常数×温度
bins = (25, 25)  # 与前面代码一致的bins

# --------------------------
# 2. 计算二维直方图(计数)
# --------------------------
# 提取二维数据
x = df_samples["Dimension 1"]
y = df_samples["Dimension 2"]

# 计算直方图计数(不绘图,纯数值计算)
counts, x_edges, y_edges = np.histogram2d(x, y, bins=bins)

# 总样本数
total_samples = np.sum(counts)

# --------------------------
# 3. 概率分布 → 自由能计算
# --------------------------
# 转概率(避免0计数导致ln无穷大,加极小值)
prob = counts / total_samples + 1e-12  

# 自由能计算(单位:kJ/mol)
free_energy = -kBT * np.log(prob)

# 归一化自由能:最低自由能设为0(最稳定状态为参考)
free_energy -= np.min(free_energy)

# --------------------------
# 4. 绘制二维自由能图
# --------------------------
plt.figure(figsize=(8, 6))
# 绘制自由能热力图
plt.contourf(x_edges[:-1], y_edges[:-1], free_energy.T, 
             cmap=plt.cm.jet, levels=50)
plt.colorbar(label='Free Energy (kJ/mol)')
plt.xlabel("Dimension 1")
plt.ylabel("Dimension 2")
plt.title("2D Free Energy Landscape (300K)")
plt.axis('equal')
plt.show()

# --------------------------
# 5. 【关键】定义两个状态 + 计算布居数/自由能差
# --------------------------
# 手动定义状态(根据我们的自由能图低谷区域修改阈值!)
# 示例:按 Dimension 1 划分两个状态
STATE1_THRESHOLD = 0  # 状态1:Dim1 < 0
STATE2_THRESHOLD = 0  # 状态2:Dim1 > 0

# 筛选两个状态的样本
state1 = df_samples[df_samples["Dimension 1"] < STATE1_THRESHOLD]
state2 = df_samples[df_samples["Dimension 1"] > STATE2_THRESHOLD]

# 计算布居数(Population)
pop1 = len(state1) / total_samples
pop2 = len(state2) / total_samples

# 计算状态自由能(以最低自由能为0)
G1 = -kBT * np.log(pop1)
G2 = -kBT * np.log(pop2)
delta_G = G2 - G1  # 自由能差:State2 → State1

# --------------------------
# 6. 打印结果
# --------------------------
print("="*50)
print(f"总样本数:{total_samples}")
print(f"状态1 布居数:{pop1:.3f} | 自由能:{G1:.3f} kJ/mol")
print(f"状态2 布居数:{pop2:.3f} | 自由能:{G2:.3f} kJ/mol")
print(f"状态2 与 状态1 自由能差 ΔΔG:{delta_G:.3f} kJ/mol")
print("="*50)

1. 把直方图 → 自由能图
  • 原代码:plt.hist2d 只画计数分布
  • 新代码:用 np.histogram2d 计算计数 → 转概率 → 算自由能 → 画自由能势能面
  • 颜色代表自由能高低:蓝色/深色=低能稳定,红色=高能不稳定
2. 定义状态

此处用 Dimension 1 的数值阈值 划分了两个状态(可以根据自由能图的低谷修改阈值):

  • State 1:低能稳定构象
  • State 2:高能/另一稳定构象
3. 计算核心物理量
  1. 相对布居数
    该状态的样本数 / 总样本数
  2. 状态自由能
    G = − k B T ln ⁡ ( P ) G = -kBT\ln(P) G=−kBTln(P)
  3. 自由能差
    Δ Δ G = G 2 − G 1 \Delta\Delta G = G_2 - G_1 ΔΔG=G2−G1

自由能不需要复杂的分子模拟/公式,只需要「样本分布」!

我们的二维数组 = 样本的分布计数 → 这就是计算自由能的全部原始所需。


先明确一下我们输入的是什么?

我们这里说的简单二维数组,本质是:

一个二维直方图 :把平面分成很多小格子,每个格子里写一个数字 → 这个数字 = 有多少个数据点落在这个格子里

比如:

  • 格子A:100个点
  • 格子B:10个点
  • 格子C:0个点

这就是统计分布,是计算自由能的唯一输入。


核心物理逻辑就是玻尔兹曼分布,这是底层的灵魂,也是为什么简单分布能算自由能的原因:

统计物理铁律,

数据点出现得越多的地方 → 体系越喜欢待在这里 → 自由能越低(越稳定)

数据点越少的地方 → 体系不喜欢 → 自由能越高(越不稳定)


第1步:把「计数」变成「概率」
  • 输入:二维数组(每个格子的点数)
  • 操作:每个格子的点数 ÷ 总点数
  • 计算意义
    得到体系出现在这个格子的概率
    (概率0~1,概率越高=越喜欢这里)
第2步:概率 → 自由能(核心公式)
  • 操作:自由能 = -kBT × ln(概率)
  • 计算意义
    把「概率高低」直接翻译成「自由能高低」
    • 概率大 → ln(概率) 大 → 自由能 (稳定)
    • 概率小 → ln(概率) 小 → 自由能 (不稳定)
第3步:自由能归一化
  • 操作:所有自由能 - 最小的自由能
  • 计算意义
    最稳定的地方设为0自由能 (参考点)
    其他区域的能量 = 比最稳定状态高多少
第4步:定义状态 → 算能量差/布居数
  • 操作:圈两个区域(状态1、状态2),统计里面的总点数
  • 计算意义
    1. 布居数:两个状态的占比(谁更常见)
    2. 自由能差:两个状态谁更稳定,稳定多少

我们这里用最简单的code

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# --------------------------
# 1. 基础参数(常温 300K)
# --------------------------
kBT = 2.479  # 单位:kJ/mol,玻尔兹曼常数×温度
bins = (25, 25)  # 与前面原代码一致的bins

# --------------------------
# 2. 计算二维直方图(计数)
# --------------------------
# 提取二维数据
x = df_samples["Dimension 1"]
y = df_samples["Dimension 2"]

# 计算直方图计数(不绘图,纯数值计算)
counts, x_edges, y_edges = np.histogram2d(x, y, bins=bins)

# 总样本数
total_samples = np.sum(counts)

# --------------------------
# 3. 概率分布 → 自由能计算
# --------------------------
# 转概率(避免0计数导致ln无穷大,加极小值)
prob = counts / total_samples + 1e-12  

# 自由能计算(单位:kJ/mol)
free_energy = -kBT * np.log(prob)

# 归一化自由能:最低自由能设为0(最稳定状态为参考)
free_energy -= np.min(free_energy)

# --------------------------
# 4. 绘制二维自由能图
# --------------------------
plt.figure(figsize=(8, 6))
# 绘制自由能热力图
plt.contourf(x_edges[:-1], y_edges[:-1], free_energy.T, 
             cmap=plt.cm.jet, levels=50)
plt.colorbar(label='Free Energy (kJ/mol)')
plt.xlabel("Dimension 1")
plt.ylabel("Dimension 2")
plt.title("2D Free Energy Landscape (300K)")
plt.axis('equal')
plt.show()

# --------------------------
# 5. 【关键】定义两个状态 + 计算布居数/自由能差
# --------------------------
# 手动定义状态(根据我们的自由能图低谷区域修改阈值!)
# 示例:按 Dimension 1 划分两个状态
STATE1_THRESHOLD = 0  # 状态1:Dim1 < 0
STATE2_THRESHOLD = 0  # 状态2:Dim1 > 0

# 筛选两个状态的样本
state1 = df_samples[df_samples["Dimension 1"] < STATE1_THRESHOLD]
state2 = df_samples[df_samples["Dimension 1"] > STATE2_THRESHOLD]

# 计算布居数(Population)
pop1 = len(state1) / total_samples
pop2 = len(state2) / total_samples

# 计算状态自由能(以最低自由能为0)
G1 = -kBT * np.log(pop1)
G2 = -kBT * np.log(pop2)
delta_G = G2 - G1  # 自由能差:State2 → State1

# --------------------------
# 6. 打印结果
# --------------------------
print("="*50)
print(f"总样本数:{total_samples}")
print(f"状态1 布居数:{pop1:.3f} | 自由能:{G1:.3f} kJ/mol")
print(f"状态2 布居数:{pop2:.3f} | 自由能:{G2:.3f} kJ/mol")
print(f"状态2 与 状态1 自由能差 ΔΔG:{delta_G:.3f} kJ/mol")
print("="*50)
python 复制代码
import numpy as np
import matplotlib.pyplot as plt

def histogram_to_free_energy(x, y, bins=100, kT=1.0):
    """
    将二维散点数据转换为自由能面。
    
    公式: F = -kT * log(P), 其中P是直方图归一化后的概率密度。
    
    Parameters
    ----------
    x, y : array-like, 输入数据
    bins : int or tuple, 网格数
    kT : float, 温度能量因子
    
    Returns
    -------
    F : 2D array, 自由能面(相对于全局最小值)
    extent : tuple, 绘图范围(xmin,xmax,ymin,ymax)
    """
    # 构建2D直方图并归一化为概率密度
    hist, xedges, yedges = np.histogram2d(x, y, bins=bins, density=True)
    
    # 处理空网格: 将零概率替换为最小的非零概率值
    min_nonzero = hist[hist > 0].min()
    hist[hist == 0] = min_nonzero
    
    # Boltzmann反演: F = -kT ln(P)
    F = -kT * np.log(hist)
    
    # 将最小值设为0
    F = F - F.min()
    
    extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
    return F, extent

# 应用该函数
F_surface, extent = histogram_to_free_energy(
    df_samples['Dimension 1'], 
    df_samples['Dimension 2'], 
    bins=100, 
    kT=1.0
)

# 绘制自由能景观
plt.figure(figsize=(10, 8))
plt.imshow(F_surface.T, origin='lower', extent=extent, aspect='auto', cmap='viridis')
plt.colorbar(label='Free Energy (kT)')
plt.title('Free Energy Landscape from 2D Histogram')
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.contour(F_surface.T, levels=10, extent=extent, colors='white', alpha=0.5)
plt.show()

可以用GMM高斯混合model 来选取聚类状态

我们再来回顾一下这两张图,

一个是数据分布二维直方图,另外一个是将概率转化为格点中的自由能的二维热图

关键在于有了能量等高线图之后,如何科学定义状态(state)?

我们前面的code只是作为算法演示,给出了最简单的操作:按照0划分。

⚠️ 再次强调,此处我们只是专注于思路、力学与概率的理解,并不确保具体code操作上的正确性。

我们只是演示了随机切分,当然我们需要依托势能面低谷,

补充小问题:能不能随便挑两个单点算 ΔG?

不能。单个格点是单一微观构象 ,而我们研究的 State 是一群相近构象构成的宏观热力学状态;单点能量波动没有统计意义,只有盆地最低能代表整个状态的热力学特征。

所有数据信息都在分布中

  1. 二维数组 = 数据的分布密度
  2. 分布密度 ∝ 稳定性 ∝ 自由能高低
  3. 玻尔兹曼公式 = 把分布直接转成自由能
  4. 不需要复杂数据!简单分布 = 全部计算依据

最后总结:

这一块应该有类似的程序脚本实现,我们前面是直接使用numpy手搓。

前面提出的两个问题本质上是同一物理量在不同视角下的呈现:概率分布直接反映了占据频率,自由能景观是概率分布经Boltzmann反演后得到的能量地形图。自由能景观可以看作概率分布"取负对数"后的映射,而状态的划分则相当于在这张地形图上识别"山谷"和"盆地"

相关推荐
小王毕业啦3 小时前
2009-2024年 各国清廉指数CPI(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
dongf20193 小时前
R语言KNN算法
算法·数据分析·r语言
wayz114 小时前
Volume:PVO(百分比成交量震荡指标)技术指标详解
算法·金融·数据分析·量化交易·特征工程
一次旅行5 小时前
【数据分析/可视化】Apache Superset企业级BI数据可视化平台实战详解
信息可视化·数据分析·apache
YangYang9YangYan5 小时前
2026新高考背景下大数据专业报考指南:数据分析的价值与前景
大数据·数据分析·高考
是上好佳佳佳呀6 小时前
【数据分析|DAY01】Series 和 DataFrame 笔记
笔记·数据分析
Jelena157795857927 小时前
主流电商平台(淘宝/1688/京东/拼多多)商品比价与数据分析实战指南
大数据·人工智能·数据分析
dongf20197 小时前
R语言线性回归
数据分析·r语言·线性回归
KaMeidebaby15 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析