![d3eee4ecd85dc62df81c51e75b9cee03.png](https://i-blog.csdnimg.cn/blog_migrate/51201dbae917cd6ecfcc76ebe087ae4b.jpeg)
前言
这篇论文来自北卡罗来纳大学的医学团队的一篇使用强化学习(reinforment learning,RL)技术做药物分子设计的文章,这篇文章和基因组学的关联并不是太大,因为目前在各大期刊上还没找到将强化学习运用到生物信息学或者基因组学的文章,奔着想学习强化学习,就找了这篇分子结构生成的文章。目前这个分子合成的是基于GANs和图网络的方法比较多。
相关链接:
论文地址 :https://advances.sciencemag.org/content/4/7/eaap7885, 在2018年中旬发表在了Science Advances上
源码地址:https://github.com/isayev/ReLeaSE,代码是基于pytorch写的,其中还用到JAK2和SMILES等用于生成分析序列的工具,作者给了三个demo,我也实现了网络部分stack-rnn和reinforment learning 部分的代码
Motivation
作者提出人工智能在药物设计已经具有一定的发展,例如分子相互作用(molecular docking), 转录组学(transcriptomics), 分子能量预测(molecular energy prediction)等等诸多子领域, 而目前从已知的structure-activity relationship (SAR) 数据中挖掘或者合成新型结构的药物是药物设计中的关键步骤,而作者希望利用深度学习技术从零(de novo)设计具有特定物理化学性质的新型的药物分子,从而有效地加快新型药物研制的速度。
通过学习170 万种已知生物活性分子化学结构词汇背后的句法和语言规则,使用RL技术来创造未出现过的新型分子。
强化学习
强化学习隶属于机器学习的一个分支,目前机器学习可以分为三类:有监督的机器学习算法、无监督的机器学习算法和强化学习。而近年来比较火热的深度学习中的强化学习算法,比如Alphago和Deep Mind中dota2战胜人类的是属于深度强化学习(deep reinforment learning, DRL),是采用深度神经网络和强化学习技术相结合的方法。
强化学习的思想是来自于人大脑学习事物的思想,我觉得是一种“尝试错误”思想,当学习一件事物或者做决策的时候,当我们作出正确的选择,环境会给我们奖励,而错误的选择则会导致惩罚,然后建模学习决策的过程。
上面过程可以抽象成几个状态,状态(state) 、动作(action)、以及执行该动作所接受的瞬时奖赏(reward),而输入可以看作离散的序列数据。
- reward 表示在某个动作过后,或者一系列动作后的奖赏值,算法的目的是最大化累积reward期望
- state 表示玩家(agent)所处的位置, policy会记录到达该状态的行进的路径
- action 表示从一个状态转移到另外一个状态的行动,每个行动都会产生reward
RL的核心就是最大化一个value function, 使得rewardk的值最大化,基于以上的基本思想,强化学习也发展出不同的分支:下面就是比较基本的分类:
![168d6017b0d7d998769212f036637edd.png](https://i-blog.csdnimg.cn/blog_migrate/22037af7d284d3ac0cf87a96363ab97b.jpeg)
这个图是来自与openAI Spinning Up的划分, 地址在这:https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html#citations-below
主要分成了Model-Free 和 Model-Based两种
- Model-Free 就是在真实的环境中进行学习,学习策略优化,不需要对环境进行建模,一些分支比如Q learning, Sarsa, Policy Gradients 都是从环境中得到反馈然后从中学习
- Model-Based 就是在模拟的环境中学习,把整个学习过程变成了环境模拟学习+策略优化,比如AlphaZero就是在很多模拟的数据场景,给定了训练模型中学习
![6c8b7116cbdcd15584d3ae78394965e5.png](https://i-blog.csdnimg.cn/blog_migrate/e3512236d3e672d6776421760a0c224d.jpeg)
![c27c2bd8ad89a8c562986453fb97b0c0.png](https://i-blog.csdnimg.cn/blog_migrate/c460fcaa4223d990a18000d94f9bdcde.jpeg)
根据奖励策略不同还可以分成Policy-based 和 Value-based
- Policy-based 得到的reward并不是一个奖惩值,而是一个概率,会逐渐增加reward概率高的action的选中概率,作者在ReLeaSE中使用的 Policy Gradients就是基于概率的reward。
- Value-based 的到是奖励得到的reward期望,根据期望的高低选择行动,Q-learning就是基于value得到计算reward的
Q-learning
Q-learning中Q表示Q(s, a)就是在当前状态s(state)下,采取动作a (action)动作能够获得reward的期望值,不同的行动a会获得不同的reward,并用一个Q table来存储,选择最大期望后更新Q table,计算流程:
![9512490cb26b7e4c4b108d3176cd697d.png](https://i-blog.csdnimg.cn/blog_migrate/42e0c43cbcb38dc3a06fb8a7a000e883.jpeg)
Q table的初始值一般为0, 在一定次数的episode(初始化的过程)后,随机选择起始点,在未到达终点之前,计算不同action获得的reward,选择最优的路径单步更新(代码中会加入随机的游走概率),更新Q table,其中Q table更新如下:
$
Q learning 是一种贪婪算法,通过最大化Q函数(特定状态和动作下的未来奖励期望),通过Q table获取选择最优路径, 同时不断更新Q table,得到最优近似。
DQN
DQN(deep Q-learning network) 是DRL的一种,DQN不用Q table记录Q值,而是用神经网络来预测Q值,并通过不断更新神经网络从而学习到最优的行动路径,解决状态和行动过多导致Q table 维度和索引爆炸问题,网络的输入为state和action的显式或隐式表达,输出为对应的Q值Q(s,a),反向传播过程(MSE loss):
Policy Gradients
Policy Gradients 是Policy Based的RL方法,优点:
- 建模非离散&连续的动作
- 克服随机策略问题
- 连续空间有高的计算效率(高维max函数耗时)
思想:参考反向传播,无确定label下,reward代表action的置信度,高reward->增加action概率,低reward->降低action概率,即最大化带衰减reward的累加期望:
目标函数无法直接优化
ReLeaSE
论文框架:
![7b10086be30c93597b44e424b6cf6192.png](https://i-blog.csdnimg.cn/blog_migrate/ccc8af9798057965283dda34d1adcc33.jpeg)
该部分包括两个子模型,生成器(generative model)和预测器(predictive model),generative model由一个预训练的栈式GRU构成,输入和输出具有相同维度,输出新的SMILES字符串作为预测器的输入,预测器通过policy gradient的算法计算reward,反馈给生成器,并微调两个网络其中Policy gradient loss计算如下:
Ri 是在i时刻获得的reward,
Generator
网络结构:
![4b85493a303629939c93052fe0a2ac30.png](https://i-blog.csdnimg.cn/blog_migrate/1506b7f1dc588a35515523e1d7a00d96.jpeg)
- 生成器由一个stack-GRU构成,生成的前缀字符串输入,输出字符 table全概率,softmax 损失函数
- 预训练:ChEMBL21 database, 包含1.5 million的SMILES序列->学习分子的排列性质
- 比较预训练的产生的分子序列和dataset的重合度低,采用SAS验证化学性质的有效性
- 分析栈式结构相比单层结构生成更优的分子序列
- 生成阶段:生成器参数不更新,前缀字符作为输入,连续预测字符排列,相当于做评估,RL阶段会使用Policy Gradients 更新
Predictor
网络结构:
![deb88716b1d8afd85b703df58209fb85.png](https://i-blog.csdnimg.cn/blog_migrate/8ec50f5eff50778c4a48134643834f20.jpeg)
- 输入是 SMILES的字符串序列,网络结构是一个单层的LSTM网络,包括ont-hot输入->低维embedding层->LSTM层->全连接层,最后得到一个归一化的值作为reward。
- 使用OpenChem toolkit进行预训练,这个是用于评判一个序列的实际性能的工具,预训练结果作为RL阶段的true label
RL training
- 联合训练=训练一个RL框架,生成器相当于agent,生成具有一定化学性质的SMILEs字符串,预测器作为环境反馈,每次对于agent的aciton输出reward,最终使用policy gradient最小化训练loss,也就是最大化reward的概率得分。
torch 的policy gradient loss计算:
discounted_reward = reward
total_reward += reward
for p in range(len(trajectory)-1):
output, hidden, stack = self.generator(trajectory_input[p],
hidden,
stack)
log_probs = F.log_softmax(output, dim=1)
top_i = trajectory_input[p+1]# 只选取了TOP-N,不是全类别
#discounted_reward-> 更新的reward
rl_loss -= (log_probs[0, top_i]*discounted_reward)
discounted_reward = discounted_reward * gamma
# Doing backward pass and parameters update
rl_loss = rl_loss / n_batch
total_reward = total_reward / n_batch
rl_loss.backward()
实验分析
最后为了验证整个RL框架的有效性,将输出的SMILES string进行了很多方面的效果评估,都是用一些现成的独立工具,和网络的训练没有关系,例如用T-SNE进行分子聚类分析,可视化的化学子结构分析,PIC50分析等等,化学的我不太懂,就不去查了,有兴趣可以去看看实验部分,我们主要目的是为了学习深度强化学习。
![098d52b39437566abc7228fd75c688d6.png](https://i-blog.csdnimg.cn/blog_migrate/86d439c2444f72b72b16e7b0ffe06d51.jpeg)
本部分结束
欢迎大家关注我的知乎专栏:从零开始生物信息学
相同内容也可以关注我的微信公众号: 壹读基因:
![87d9894fb7290e57d7bffb6a7e0a8fe4.png](https://i-blog.csdnimg.cn/blog_migrate/cae83ab6c2a85bafad871606714daf6f.jpeg)