跳转至

PyTorch

借助 torchmetricsCompositionalMetric 将越大越好的指标作为损失函数

在量化研究中,我们可以使用诸如 IC 一类的指标来衡量信号的质量。若将 IC 作为损失函数,我们自然是希望其值越大越好。但是,模型的优化过程总是朝着损失函数越小的方向进行的,因此我们需要将 IC 取反后作为损失值,使得模型朝着 IC 越大的方向优化。

本文介绍了一个便捷的方法,借助 torchmetricsCompositionalMetric 将越大越好的指标作为损失函数。

Python
pred = torch.tensor([1, 2, 3, 4]).to(torch.float32)
target = torch.tensor([2, 3, 5, 10]).to(torch.float32)
print("原始相关系数:", np.corrcoef(target, pred)[0, 1])
loss_fn = 0 - PearsonCorrCoef()
print("损失函数:", loss_fn(pred, target))
Text Only
原始相关系数: 0.9431191251430151
损失函数: tensor(-0.9431)

机器生成文本检测器

简介

本应用使用 BERT 模型和 SHAP 解释性分析技术,旨在帮助用户判断一个文本是否可能由机器生成。应用允许用户输入文本,然后使用预先训练好的 BERT 模型进行分析,最后通过 SHAP 提供文本的可解释性分析,帮助理解模型的预测结果。

在线体验地址:https://machine-generated-text-detection.streamlit.app

screenshot

理解 PyTorch 中的 CrossEntropyLoss

在机器学习中,特别是处理分类问题时,损失函数是衡量模型预测与实际标签差异的关键。在 PyTorch 中,CrossEntropyLoss是一个常用的损失函数,用于分类问题。它首先通过 Softmax 函数计算对应类别的概率值,然后计算每个样本的负对数似然损失,最后对所有样本的损失值求平均。

本文将通过一个简单的例子来手动计算CrossEntropyLoss,并展示如何使用 PyTorch 实现这一过程。

PyTorch 中的数据与模型迁移:理解 .to(device) 的使用

在使用 PyTorch 框架进行深度学习模型训练时,我们经常需要将模型从 CPU 迁移到 GPU 上以加速计算。PyTorch 提供了一个简洁的 API model.to(device) 来实现这一过程。但是,在使用这个 API 时,我们可能会遇到两种不同的写法:model.to(device)model = model.to(device)。那么,这两种写法有什么区别呢?

深入理解 GRU 及其 PyTorch 实现

本文介绍了 GRU 的网络结构,梳理了 GRU 的前向传播关系,即 \(t-1\) 时间步的隐状态 \(h_{t-1}\)\(t\) 时间步的输入 \(x_t\)、更新门 \(z_t\)、重置门 \(r_t\)\(t\) 时间步的隐状态输出 \(h_t\) 之间是如何转换的。为了更好地理解 GRU,本文给出了各个张量的维数大小关系的数值示例。最后,本文提供了使用 PyTorch 实现一个 2 层 GRU 模型的代码。

Gated Recurrent Unit

基于 Bert 的中文问答机器人

最终训练的模型已经部署到 Hugging Face,请尝试输入一些简单的中文段落和相关问题 🌝

本文基于 Bert 的中文分词和问答的预训练模型,利用 10, 000 余条中文问答数据进行微调,构建了能够理解中文段落并回答相关问题的问答机器人。用自定义的数据进行测试,模型的效果基本能达到“正确回答小学三年级以下的阅读理解题”的水平。

predict-james

这是我第一次完整地实现一个 NLP 项目。在这个过程中,我学习了如何使用预训练模型、中文分词、准备数据、文本编码与解码、设计问答机器的损失与优化目标、导出训练模型等技术,对问答领域的 NLP 有了更透彻的理解。

理论部分可参考李沐老师的 Transformer 论文逐段精读【论文精读】BERT 论文逐段精读【论文精读】。当然,如果想要理解得更透彻一些,还是应该动手写代码,看看每一步到底在做什么,到真正实现出来看到模型结果的那一刻,是非常有成就感的。

不同 GPU 平台的训练效率对比

为对比不同平台上的 GPU 的训练效率的差异,我在 Kaggle、Google Colab、趋动云和本地的 Macbook Pro M1 Pro 四台机器上分别进行了训练。对于单个 Epoch:

  1. 付费使用的趋动云使用 2 个 GPU 并行训练,效率最高,单个 Epoch 共耗时 4 分 40 秒;
  2. 免费使用的 Kaggle 耗时 9 分钟,Google Colab 耗时 17 分钟;
  3. 在 Macbook Pro M1 Pro 上运行效率最低,即使使用了 GPU,单个 Epoch 仍预计耗时 3 小时。

手动计算简单的反向传播算法

反向传播算法是深度学习进行参数优化的基础。本文手动计算了多层感知机中损失函数对权重、净输入值的梯度,并与 PyTorch 的计算结果进行了验证。

反向传播算法的本质是矩阵微分和链式法则,这两个知识都不难理解,但刚接触反向传播算法时总容易被一些陌生的符号弄糊涂。理解反向传播算法的理论推导,最重要的是弄清楚各个向量、矩阵的维度,以及熟练它们之间的前向传播关系。最后多加练习,就能对反向传播算法的理解更加透彻。

理论推导

image-20230411003621789

PyTorch 基础

本文是深度学习课程的学习笔记,介绍了:

  1. 安装 GPU 版本的 PyTorch。
  2. PyTorch 的基本用法,例如创建张量、张量运算、求解梯度等。

PyTorch 处理二分类问题

在量化研究中,将预测收益率数值的回归问题转换为预测涨跌、预测超额收益的正负等二分类问题是十分常见的。在 PyTorch 中可以修改部分代码,让回归问题的网络结构在二分类问题中也同样适用。