more
注释之前的内容被视为文章摘要。
文献阅读(3)SAN
标题:Partial Transfer Learning with Selective Adversarial Networks
清华大学龙明盛团队 2018 年发表在计算机视觉顶级会议 CVPR 上的文章提出了一个选择性迁移网络 (Partial Transfer Learning)。作者认为,在大数据时代,通常我们会有大量的源域数据。这些源域数据比目标域数据,在类别上通常都是丰富的。比如基于 ImageNet训练的图像分类器,必然是针对几千个类别进行的分类。我们实际用的时候,目标域往往只是其中的一部分类别。这样就会带来一个问题:那些只存在于源域中的类别在迁移时,会对迁移结果产生负迁移影响。
这种情况通常来说是非常普遍的。因此,就要求相应的迁移学习方法能够对目标域,选择相似的源域样本 (类别),同时也要避免负迁移。但是目标域通常是没有标签的,不知道和源域中哪个类别更相似。作者指出这个问题叫做 partial transfer learning。这个 partial,就是只迁移源域中那部分和目标域相关的样本。下图展示了部分迁移学习的思想。
image-20230418192557331 作者提出了一个叫做 Selective Adversarial Networks (SAN) [Cao et al., 2017] 的方法来处理 partial transfer 问题。在 partial 问题中,传统的对抗网络不再适用。所以就需要对进行一些修改,使得它能够适用于 partial 问题。因为不知道目标域的标签,也就没办法知道到底是源域中哪些类是目标域的。为了达到这个目的,作者对目标域按照类别分组,把原来的一整个判别器分成了个:,每一个子判别器都对它所在的第 k 个类进行判别。作者观察到了这样的事实:对于每个数据点来说,分类器的预测结果其实是对于整个类别空间的一个概率分布。因此,在进行对抗时,需要考虑每个样本属于每个类别的影响。这个影响就是由概率来刻画。所以作者提出了一个概率权重的判别器:
文献阅读
标题:{Interpretable bilinear attention network with domain adaptation improves drug–target prediction}
1 亮点
2 模型示意图
3 实验内容
4 方法
5 代码
1 向量范数
1.1 范数定义
-
范数(0范数)
-
范数(和范数或1范数)
-
范数(范数或 范数,范数是使用最为广泛的范数)
-
范数(极大范数)
文献阅读(1)CODE-AE
标题:A context-aware deconfounding autoencoder for robust prediction of personalized clinical drug response from cell-line compound screening**
1 亮点
- CODE-AE既可提取不同样本间的共享生物信号,也可以提取它们特有的私有生物信号,从而分离出数据模式之间的混杂因素;
- CODE-AE通过将药物反应信号与混杂因素分离,进而实现局部对齐(大多方法只能实现在全局上的对齐)。
从0开始搭建Auto-Encoder
搭建Auto-Encoder模型的时候,选择了更加结构化的搭建模式:
- 搭建base_ae:这一步用来确定一个ae模型的基本结构会有哪些(其中有部分未必会用到)
1 搭建base_AE模型
- 初始化
- 编码函数
- 解码函数
- 采样函数
- 生成函数
- 前向传播(抽象方法)
- 损失函数(抽象方法)
'base_ae.py'
from torch import nn
from abc import abstractmethod # 定义抽象方法
from typing import TypeVar # 定义数据类新的接口
from typing import List, Any
Tensor = TypeVar('torch.tensor') # 定义泛型变量,表示一个 PyTorch 的 tensor
class BaseAE(nn.Module):
def __init__(self) -> None: # 初始化神经网络模型的各个组件
super(BaseAE, self).__init__()
def encode(self, input: Tensor) -> List[Tensor]: # 定义一个编码过程
raise NotImplementedError
def decode(self, input: Tensor) -> List[Tensor]: # 定义一个解码过程
raise NotImplementedError
def sample(self, batch_size: int, current_device: int, **kwargs) -> Tensor: # 定义一个采样方法
raise RuntimeWarning()
def generate(self, x: Tensor, **kwargs) -> Tensor: # 定义一个生成方法
raise NotImplementedError
def initialize_weights(self) -> None: # 定义初始化权重方法
raise NotImplementedError
@abstractmethod # 装饰器,声明下面的方法为抽象方法
def forward(self, *inputs: Tensor) -> Tensor: # 定义前向传播过程
pass
@abstractmethod
def loss_function(self, *inputs: Any, **kwargs) -> Tensor: # 定义损失函数
pass
Argparse
1 示例
import argparse #导入argparse模块
parser = argparse.ArgumentParser(description='argparse learning') # 创建解析器
parser.add_argument('--integers', type=int, default=0, help='input an integer') # 添加参数
args = parser.parse_args() # 解析参数
print(args)
Numpy
np.random.shuffle()
:改变原始数组的顺序,使得数组中的元素随机打乱,从而实现随机采样等操作。
np.random.shffle()
import numpy as np
# 创建一个一维数组
a = np.array([1, 2, 3, 4, 5])
# 将数组中的元素随机排列
np.random.shuffle(a)
# 打印排列后的数组
print(a)
Loss Function分类
1 均方误差(Mean Squared Error, MSE)
MSE(均方误差)损失是机器学习中使用的数学函数,用于衡量预测输出与真实输出之间的平均平方差。它通常用作回归问题的损失函数,目标是预测连续的目标变量。