将微调后的模型发布至 Hugging Face
发布微调后的 BERT 模型到 Hugging Face 模型库是一个很好的方式,可以让社区成员共享和使用你的工作。本文介绍了如何准备和发布你的模型到 Hugging Face。
发布微调后的 BERT 模型到 Hugging Face 模型库是一个很好的方式,可以让社区成员共享和使用你的工作。本文介绍了如何准备和发布你的模型到 Hugging Face。
本应用使用 BERT 模型和 SHAP 解释性分析技术,旨在帮助用户判断一个文本是否可能由机器生成。应用允许用户输入文本,然后使用预先训练好的 BERT 模型进行分析,最后通过 SHAP 提供文本的可解释性分析,帮助理解模型的预测结果。
在线体验地址:https://machine-generated-text-detection.streamlit.app
CrossEntropyLoss
在机器学习中,特别是处理分类问题时,损失函数是衡量模型预测与实际标签差异的关键。在 PyTorch 中,CrossEntropyLoss
是一个常用的损失函数,用于分类问题。它首先通过 Softmax 函数计算对应类别的概率值,然后计算每个样本的负对数似然损失,最后对所有样本的损失值求平均。
本文将通过一个简单的例子来手动计算CrossEntropyLoss
,并展示如何使用 PyTorch 实现这一过程。
.to(device)
的使用在使用 PyTorch 框架进行深度学习模型训练时,我们经常需要将模型从 CPU 迁移到 GPU 上以加速计算。PyTorch 提供了一个简洁的 API model.to(device)
来实现这一过程。但是,在使用这个 API 时,我们可能会遇到两种不同的写法:model.to(device)
和 model = model.to(device)
。那么,这两种写法有什么区别呢?
本文介绍了 GRU 的网络结构,梳理了 GRU 的前向传播关系,即 \(t-1\) 时间步的隐状态 \(h_{t-1}\)、\(t\) 时间步的输入 \(x_t\)、更新门 \(z_t\)、重置门 \(r_t\) 和 \(t\) 时间步的隐状态输出 \(h_t\) 之间是如何转换的。为了更好地理解 GRU,本文给出了各个张量的维数大小关系的数值示例。最后,本文提供了使用 PyTorch 实现一个 2 层 GRU 模型的代码。
最终训练的模型已经部署到 Hugging Face,请尝试输入一些简单的中文段落和相关问题
本文基于 Bert 的中文分词和问答的预训练模型,利用 10, 000 余条中文问答数据进行微调,构建了能够理解中文段落并回答相关问题的问答机器人。用自定义的数据进行测试,模型的效果基本能达到“正确回答小学三年级以下的阅读理解题”的水平。
这是我第一次完整地实现一个 NLP 项目。在这个过程中,我学习了如何使用预训练模型、中文分词、准备数据、文本编码与解码、设计问答机器的损失与优化目标、导出训练模型等技术,对问答领域的 NLP 有了更透彻的理解。
理论部分可参考李沐老师的 Transformer 论文逐段精读【论文精读】 和 BERT 论文逐段精读【论文精读】。当然,如果想要理解得更透彻一些,还是应该动手写代码,看看每一步到底在做什么,到真正实现出来看到模型结果的那一刻,是非常有成就感的。
不同 GPU 平台的训练效率对比
为对比不同平台上的 GPU 的训练效率的差异,我在 Kaggle、Google Colab、趋动云和本地的 Macbook Pro M1 Pro 四台机器上分别进行了训练。对于单个 Epoch:
反向传播算法是深度学习进行参数优化的基础。本文手动计算了多层感知机中损失函数对权重、净输入值的梯度,并与 PyTorch 的计算结果进行了验证。
反向传播算法的本质是矩阵微分和链式法则,这两个知识都不难理解,但刚接触反向传播算法时总容易被一些陌生的符号弄糊涂。理解反向传播算法的理论推导,最重要的是弄清楚各个向量、矩阵的维度,以及熟练它们之间的前向传播关系。最后多加练习,就能对反向传播算法的理解更加透彻。
在 AlphaNet-V1 加入多步长的特征提取层,将池化层替换为门控循环单元(GRU),并尝试预测收益率和超额收益的方向。最后将随机森林模型作为 baseline 进行比较。
借鉴卷积神经网络的思想,通过自定义运算符函数,构造类似卷积层的特征提取层。结合批标准化层、池化层、全连接层,搭建 AlphaNet-V1,实现从量价数据到收益率预测的自动挖掘。
在量化研究中,将预测收益率数值的回归问题转换为预测涨跌、预测超额收益的正负等二分类问题是十分常见的。在 PyTorch 中可以修改部分代码,让回归问题的网络结构在二分类问题中也同样适用。