NLP学习记录八:理解注意力机制

目录

一、问题假设

1.1 题目

1.2 基础代码

二、解决方法

2.1 平均池化

2.1.1 数学建模

 2.1.2 代码实现

2.2 不带参数的注意力池化

2.2.1 数学建模

 2.2.2 代码实现

2.3 带参数的注意力池化

2.3.1 数学建模

2.3.2 代码实现


一、问题假设

1.1 题目

考虑如下回归问题:

        给定回归方程:

        现有成对的“输入-输出”数据集{(x1, y1), ...... , (xn, yn)},输入x与输出y之间满足:

        方程中, ε表示噪声,服从均值为0和标准差为0.5的正态分布。

        请设计一个估计器f,使得估计器的输入x和输出的y_hat=f(x)尽可能地契合回归方程表示的等式关系。

1.2 基础代码

utils.py:

utils.py:NLP学习记录相关的类和函数-优快云博客文章浏览阅读61次。NLP学习记录相关的类和函数https://blog.youkuaiyun.com/scongx/article/details/141394511?spm=1001.2014.3001.5502

attentionPooling.py:

导入依赖包:

import torch
from torch import nn
from matplotlib import pyplot as plt
from utils import plot, show

定义回归方程:

def f(x):
    return 2 * torch.sin(x) + x**0.8

生成训练集,对应于问题描述的“输入-输出”数据集{(x1, y1), ...... , (xn, yn)}

if __name__=='__main__':
    # 训练样本的大小
    n_train = 50

    # torch.rand(n_train)表示生成一个形状为(n_train,)的张量,其中包含了从0到1之间均匀分布的随机数
    # 乘5操作使得张量中随机生成的每个元素都乘5
    # torch.sort表示由小到大排序
    x_train, _ = torch.sort(torch.rand(n_train) * 5)

    # 训练样本的输出,前一项表示回归方程输出,后一项表示均值为0、方差为0.5的噪声
    y_train = f(x_train) + torch.normal(0.0, 0.5, (n_train,))

生成测试集:

# main:
    # 测试样本,在[0, 6)之间生成等差数列,公差为0.1
    x_test = torch.arange(0, 6, 0.1)

    # 测试样本的真实输出
    y_truth = f(x_test)

    # 测试样本的大小
    n_test = len(x_test)

另外再定义一个用于绘制样本输出结果的函数:

def plot_kernel_reg(y_hat, x_test, y_truth, x_train, y_train):
    # 绘制测试样本的真实输出、输入估计器f后的输出
    plot(x_test, [y_truth, y_hat], 'x', 'y', legend=['Truth'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值