尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
al_for_fep 配置实战:面向自由能计算的单轮主动学习循环(Makita 管线)
al_for_fep 配置实战面向自由能计算的单轮主动学习循环Makita 管线【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research本篇技术指南聚焦于al_for_fep模块——一个专为自由能计算Free Energy Perturbation, FEP设计的主动学习Active Learning实验框架。整个主动学习循环由一个ml_collections.ConfigDict配置文件驱动从模型选择、特征工程到样本挑选策略全部声明式定义并支持命令行参数覆盖。读完本文你将掌握该模块全部配置字段的含义与取值、如何用自带测试数据跑通一个完整循环、底层单轮执行流水线MakitaCycle的内部原理以及如何将真实数据集如随仓库提供的 TYK2 FEP 数据接入实验。概述一个配置文件驱动的主动学习循环在自由能计算场景中每个分子都需要昂贵的 FEP 模拟才能获得结合自由能如 ΔG。主动学习的思路是用少量已算过的分子训练一个代理模型surrogate model预测整个虚拟化合物库virtual library的 ΔG再根据预测挑选最有价值的一批分子送去跑昂贵的 FEP 计算从而以最少的计算量获得最大信息增益。al_for_fep将这一训练 → 预测 → 挑选的循环封装为Makita 集中式管线核心协调器是 single_cycle_lib.py 中的MakitaCycle类。与传统的脚本流程写死在代码里不同本模块把循环的每一步用什么模型、用什么特征、按什么策略挑多少样本全部参数化到配置中The active learning cycle is defined by a single configuration file. Simply pass the configuration to the module to run. It is possible to override configuration parameters on the command line (via ConfigDict flags).用户只需提供一份配置 两份数据文件训练池与虚拟库即可运行一个完整的主动学习循环并在命令行上以--cycle_config.xxx.yyy的形式覆盖任意配置项。入口与运行方式single_cycle_main循环的唯一入口是 single_cycle_main.py它只做三件事解析--cycle_config指向的配置文件、拒绝多余位置参数、将配置交给MakitaCycle执行_CYCLE_CONFIG config_flags.DEFINE_config_file( namecycle_config, defaultNone, help_stringLocation of the ConfigDict file containing experiment specifications., lock_configTrue) ... single_cycle_lib.MakitaCycle(_CYCLE_CONFIG.value).run_cycle()几点值得注意的实现细节配置通过ml_collections.config_flags.DEFINE_config_file加载lock_configTrue意味着配置在加载后即被锁定避免运行中被意外修改命令行覆盖的语法为--cycle_config.顶层字段.子字段 ...与配置文件中的嵌套结构一一对应例如--cycle_config.cycle_dir ../cycle1启动方式固定为模块调用python3 -m al_for_fep.single_cycle_main因此需要以仓库根目录为工作目录al_for_fep作为顶层包运行。仓库同时提供了 run.sh 一键脚本完整展示了从创建虚拟环境到运行循环的标准流程virtualenv -p python3 . source ./bin/activate pip install -r al_for_fep/requirements.txt python3 -m al_for_fep.single_cycle_main \ --cycle_config al_for_fep/configs/simple_greedy_gaussian_process.py \ --cycle_config.cycle_dir ../cycle1 \ --cycle_config.training_pool al_for_fep/data/testdata/initial_training_set.csv \ --cycle_config.virtual_libraryal_for_fep/data/testdata/virtual_library.csv依赖清单见 requirements.txtnumpy、scipy、scikit-learn、pandas、modAL主动学习框架、absl-py、ml_collections配置系统、rdkit分子指纹与描述符计算。这些依赖对应了模块的三块基石sklearn 模型族、modAL 的ActiveLearner/BayesianOptimizer编排、RDKit 的化学特征。配置字典全字段解析配置的标准格式以注释式伪代码完整定义在 README.md 中其结构分两大块model_config建模部分与selection_config挑选部分外加三个顶层字段。下面逐字段展开并补充取值范围与源码依据。model_config建模配置字段类型含义与取值model_typeString使用的模型标识符需在MODELS注册表中存在见下文模型注册表。hyperparametersml_collections.ConfigDict传给模型的额外超参数例如 sklearn ElasticNet 的l1_ratio、随机森林的n_estimators。tuning_hyperparametersDictionary若模型执行非原生超参调优在此指定搜索空间。features.feature_typeString从 CSV 解析特征的指定器fingerprint/descriptors/fingerprints_and_descriptors/vector/number。features.params.feature_columnString存放特征计算所需信息的 CSV 列名通常是 SMILES。features.params.fingerprint_sizeIntegerMorgan 指纹使用的比特数。features.params.fingerprint_radiusIntegerMorgan 指纹使用的半径。targets.feature_typeString目标值的类型典型取number。targets.params.feature_columnString存放目标值的 CSV 列名不做任何解析后处理。hyperparameters与tuning_hyperparameters的区别在源码中体现得很清楚前者直接解包传给模型构造函数后者用于显式的网格/搜索调优。例如测试用例 single_cycle_lib_test.py 中为随机森林配置了criterion、max_depth、min_samples_split、bootstrap、warm_start等 sklearn 原生参数同时用tuning_hyperparameters: [{n_estimators: [30]}]声明调优搜索空间。selection_config挑选配置字段类型含义与取值selection_typeString挑选策略标识符需在QUERY_STRATEGIES注册表中存在默认示例为greedy。hyperparametersml_collections.ConfigDict挑选策略的额外参数例如half_sample策略的alpha权重。num_elementsInteger本轮要挑选的元素个数。selection_columnsList of strings要保留到挑选结果文件selection.csv中的 CSV 列。顶层字段字段类型含义metadataString对本主动学习实验/循环的描述。必须为非空字符串否则 single_cycle_lib.py 会直接抛出ValueError该描述会被写入cycle_dir/metadata.txt。cycle_dirString预测结果与挑选结果文件的写入目录。training_poolString本循环用于训练模型的样本来源支持逗号分隔的多个 glob 路径。virtual_libraryString本循环的挑选池待预测、待挑选的分子集合。官方示例配置高斯过程 贪心挑选仓库提供了开箱即用的配置样例 configs/simple_greedy_gaussian_process.py将 GP 回归、Morgan 指纹特征与贪心挑选组合在一起def get_config(): return ml_collections.ConfigDict({ model_config: ml_collections.ConfigDict({ model_type: gp, hyperparameters: ml_collections.ConfigDict(), tuning_hyperparameters: [{}], features: ml_collections.ConfigDict({ feature_type: fingerprint, params: { feature_column: Smiles, fingerprint_size: 128, fingerprint_radius: 2 } }), targets: ml_collections.ConfigDict({ feature_type: number, params: { feature_column: dG, } }) }), selection_config: ml_collections.ConfigDict({ selection_type: greedy, hyperparameters: ml_collections.ConfigDict({}), num_elements: 2, selection_columns: [Smiles, dG, DockingScore] }), metadata: Small test for active learning., cycle_dir: , training_pool: , virtual_library: , })该示例揭示了数据文件的列约定Smiles列承载分子结构、dG列是回归目标结合自由能、DockingScore等列可随selection_columns透传到挑选结果中。cycle_dir、training_pool、virtual_library在配置中留空由命令行参数填充——这正是 README 推荐配置参数可在命令行覆盖的典型用法。单轮循环的内部流水线理解了配置结构后再看 single_cycle_lib.py 中run_cycle()的执行顺序可以精确还原一次循环的 8 个步骤幂等性检查若cycle_dir/selection.csv已存在且能被 pandas 正常读取判定该循环此前已完成直接跳过若文件存在但为空EmptyDataError则删除后重跑初始化输出目录删除并重建cycle_dir写入metadata.txt与序列化后的cycle_config.json便于事后复现实验构建虚拟库视图_get_virtual_library()读取虚拟库 CSV并用逗号分隔的 glob 模式展开training_pool将特征值存在于训练池且目标值非 NaN的样本标记为Training Example其余样本构成真正的挑选池特征与目标解析通过DATA_PARSERS注册表按feature_type分发到具体解析函数训练特征/目标 挑选池特征各解析一次实例化模型按model_type从MODELS注册表构建 estimator若配置中含halfsample_log2_shards字段还会用HalfSampleRegressor包装add_estimators对rf/gbm置真组装查询策略query_strategy functools.partial(QUERY_STRATEGIES[selection_type], n_instancesnum_elements, **hyperparameters)训练与推理对gp模型使用 modAL 的BayesianOptimizer其余模型使用ActiveLearner注意selection_type为thompson/EI/PI/UCB时会把目标乘以-1把最大化采集函数统一到最小化框架下输出全库预测写入virtual_library_with_predictions.csv新增regression列挑选结果写入selection.csv仅保留selection_columns指定的列。完整循环的正确性由 single_cycle_lib_test.py 用临时目录与合成数据SMILES 分子 lig_b_perses_dg目标列验证覆盖了配置加载、循环执行与产物校验的端到端路径。模型注册表与特征解析器模型与数据解析器都采用字符串 → 工厂类/函数的注册表模式定义在 utils/utils.py这意味着新增模型或特征类型无需改动循环主逻辑。MODELS注册表对应 models/ 子目录均实现统一的MakitaModel接口标识符实现类说明rfSklearnRfModel随机森林回归gbmSklearnGbmModel梯度提升回归linearSklearnLinearModel线性回归elasticnetSklearnElasticNetModel弹性网络hyperparameters中可配l1_ratiogpSklearnGaussianProcessModel高斯过程回归默认使用自定义 Tanimoto 核mlpSklearnMLPModel多层感知机回归其中 GP 模型最具化学领域特色SklearnGaussianProcessModel在 sklearn_gaussian_process_model.py 中定义了一个基于分子指纹的TanimotoKernelTanimoto 相似度 交集/并集替代默认 RBF 核使得分子间的相似性度量与指纹特征天然匹配该核的梯度实现直接NotImplementedError暗示实际应用中以网格/随机搜索而非梯度调参为主。DATA_PARSERS注册表对应 data/utils.py标识符解析函数说明fingerprintparse_feature_smiles_morgan_fingerprint用 RDKit 将 SMILES 转成 Morgan 指纹位向量radius/nBits可配descriptorsparse_feature_smiles_rdkit_properties计算 RDKit 全部分子描述符fingerprints_and_descriptorsparse_feature_smiles_morgan_fingerprint_with_descriptors指纹与描述符拼接vectorparse_feature_vectors解析 CSV 中以字符串存储的完整特征向量ast.literal_evalnumberparse_feature_numbers解析浮点数/类浮点字符串挑选策略与采集函数挑选逻辑集中在 selection/acquisition_functions.py通过QUERY_STRATEGIES注册greedy、half_sample为自定义EI、PI、UCB直接复用 modAL 的max_EI/max_PI/max_UCBgreedy调用np.argpartition(predictions, n_instances)[:n_instances]按预测值升序取前n_instances个——在 ΔG 越小越有利的约定下等价于直接挑选预测结合最紧密的分子属于纯利用exploitation策略half_sample结合预测值与不确定性的启发式策略alpha参数控制偏向更优预测值的权重实现采用逐轮挑选并更新协方差的贪心流程代码中通过 delta/H 矩阵的迭代完成EI/PI/UCB经典的贝叶斯优化采集函数强调探索exploration配合 GP 模型使用效果最佳这也是为何循环中 GP 模型走BayesianOptimizer分支的原因。真实数据与延伸资源除测试数据外仓库还携带了真实分子数据集 tyk2_dataset/tyk2_fep.csv可用于替换测试数据开展真实规模的 FEP 主动学习实验。更完整的开源数据发布在 Zenodo记录编号 13759490见 README.md 的 Data 一节。该方法论对应的学术出处为James Thompson, W. Patrick Walters, Jianwen A. Feng, Nicolas A. Pabon, Hongcheng Xu, Brian B. Goldman, Demetri Moustakas, Molly Schmidt, and Forrest York.Optimizing Active Learning for Free Energy Calculations. Artificial Intelligence in the Life Sciences (2022): 100050如需深入了解主动学习应用于自由能计算的动机与消融结论可直接参阅该论文。小结al_for_fep用一份 ConfigDict 一个入口函数优雅地封装了 FEP 主动学习的完整单轮循环model_config决定学什么模型、特征、目标selection_config决定怎么选策略、数量、透传列顶层字段决定数据流向与产物落盘。通过MODELS、DATA_PARSERS、QUERY_STRATEGIES三张注册表新模型、新特征、新采样策略都可以零侵入接入命令行 ConfigDict flag 覆盖机制则让超参扫描与多轮迭代每轮把上一轮selection.csv并入训练池变得极其轻量。从测试数据的dG列到 TYK2 真实数据集这套配置体系为用最少 FEP 计算换取最优化合物的实验设计提供了可直接上手的工程底座。【免费下载链接】google-researchGoogle Research项目地址: https://gitcode.com/gh_mirrors/go/google-research创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

ik_llama.cpp Trellis 量化 CPU 提速:PR 482 的 dequantizing GEMM 方案全解析

ik_llama.cpp Trellis 量化 CPU 提速:PR 482 的 dequantizing GEMM 方案全解析

人工智能大模型推理引擎本地部署模型量化模型优化 【免费下载链接】ik_llama.cpp llama.cpp fork with additional SOTA quants and improved performance 项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp 点击查看 免费下载 本文基于 ik_llama.cp…

📅 2026/9/20 1:09:02
达梦DMDSC+DMASM集群部署实战:从规划到运维避坑指南

达梦DMDSC+DMASM集群部署实战:从规划到运维避坑指南

如果你以前玩过 Oracle RAC,看到达梦的 DMDSC 应该会有种熟悉感。DMDSC(DM Data Shared Cluster)是达梦数据库的多节点共享集群方案,DMASM 则是这套集群里的自动存储管理组件,作用类似 Oracle ASM 的角色。这两个名称一…

📅 2026/9/20 1:04:02
揭秘Docker底层:Namespace隔离、Cgroups限额、UnionFS分层

揭秘Docker底层:Namespace隔离、Cgroups限额、UnionFS分层

很多用了一两年 Docker 的同学,对docker run已经熟得不能再熟,但你突然问他:Docker 到底凭什么把一个普通进程包装得像一台独立的机器?他多半会愣一下,然后说一句"不就是内核特性嘛"——对,可究竟…

📅 2026/9/20 1:04:02
MORE NEWS

更多资讯

📰

SeaTunnel 实战:用 Http Source + JDBC Sink 搭建 HTTP API 到关系型数据库的数据同步链路

SeaTunnel 实战:用 Http Source JDBC Sink 搭建 HTTP API 到关系型数据库的数据同步链路 【免费下载链接】seatunnel SeaTunnel is a multimodal, high-performance, distributed, massive data integration tool. 项目地址: https://gitcode.com/GitHub_Trendin…

📰

GetQzonehistory:把QQ空间十年历史说说批量导出到Excel

GetQzonehistory:把QQ空间十年历史说说批量导出到Excel 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一个用于 QQ空间备份 的 Python 脚本:…

📰

如何免费搞定电脑风扇噪音:FanControl 从安装到静音曲线的完整指南

如何免费搞定电脑风扇噪音:FanControl 从安装到静音曲线的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub…

📰

PTO-ISA 指令详解:TSCATTER 索引散播与掩码散播的数学语义、编程接口与后端约束

人工智能指令集算子库CANNAscend 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operatio…

📰

BrewUI:给Homebrew包管理器打造一个可视化的Web界面

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

NFS与iSCSI存储协议对比:性能测试与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬