第二十周:学习周报—文献阅读

目录

摘要

Abstract

1. 文献阅读

1.1 题目

1.2 Abstract

1.3 介绍

1.4 研究问题

1.5 相关机器学习模型

1.5.1 LSTM

1.5.2 注意力机制

1.6 模型结构

1.7 AT-LSTM优于LSTM的方面

1.8误差计算方法

1.8.1 MAE

1.8.1 RMSE

2. 基于PyTorch搭建LSTM+注意力机制模型

3. Self-supervised learning(自监督学习)

3.1 BERT模型

总结


摘要

本周主要学习为文献阅读,阅读的是一篇关于AT-LSTM模型即注意力机制结合LSTM模型的论文,在该篇论文中用到了学习过的注意力机制和LSTM模型,对这两种模型进行复习学习,分析了论文中提出的AT-LSTM模型的结构并学习模型实现代码以及该模型的优势所在。对于论文中测试误差值的两种方法MAS和MSAE进行展开学习了解。论文通过在水质预测上结果分析,验证借助注意力机制的AT-LSTM模型在多元时间序列的预测性的优势。最后初步学习了机器学习课程中的自监督学习,通过BERT模型了解自监督学习的几种训练方式。

Abstract

This week's main focus is on literature reading. we reading a paper about the AT-LSTM model, which combines attention mechanism with LSTM model. In this paper, AT-LSTM model used the learned attention mechanism and LSTM model,we review these two models and learn the structure of the AT-LSTM model proposed in the paper,at the same time,we learn the implementation code and advantages of the model. Expand learning on the two methods of testing error values in the paper, MAS and MSAE. The paper verifies the advantages of the AT-LSTM model with attention mechanism in predicting the predictive performance of multivariate time series by analyzing the results in water quality prediction. Finally, we initially learned about self supervised learning in machine learning courses and learned several training methods of self supervised learning through the BERT model.

1. 文献阅读

1.1 题目

Water Quality Prediction Based on LSTM and Attention Mechanism: A Case Study of the Burnett River, Australia(基于LSTM和注意机制的水质预测——以澳大利亚伯内特河为例)

1.2 Abstract

水质预测是水污染控制和预防的一个重要方面。利用水质监测和水环境管理收集的历史数据可以预测水质的变化趋势。现研究旨在开发长短期记忆(LSTM)网络及其基于注意力的(AT-LSTM)模型,以实现澳大利亚伯内特河水质的预测。本研究开发的模型在对伯内特河断面水质数据进行特征提取后,考虑不同时刻序列对预测结果的影响,引入注意力机制,增强关键特征对预测结果的影响。本研究利用 LSTM 和 AT-LSTM 模型对伯内特河的溶解氧(DO)进行一步前向预测和多步前向预测,并对结果进行比较。研究结果表明,注意力机制的加入提高了 LSTM 模型的预测性能。因此,本研究开发的基于 AT-LSTM 的水质预测模型显示出比 LSTM 模型更强的能力,可以为澳大利亚昆士兰州水质改善计划提供准确预测伯内特河水质的能力。

关键词:水质预测;时间序列;注意力机制;long short-term memory(LSTM)

1.3 介绍

水质指标种类繁多、水质数据采集周期长、水质指标间相关性强、水质特征非线性、数据波动性大等特点,准确有效地预测水质已成为一个具有挑战性的问题。河流水质在宏观时间尺度上表现出季节性和周期性等特征,具有非线性和不确定性。大多数水质数据属于长相关序列数据,在相应的时间序列中可能存在一些延迟和间隔较长的重要事件。结合LSTM和卷积神经网络(CNN)的混合模型,在预测水质变量方面,其性能优于单一机器学习模型,但LSTM缺乏对子窗口特征进行不同程度关注的能力,这可能会导致一些相关信息被忽略,无法重视时间序列的重要特征。应用注意力机制可以有效捕获更远的关键信息,并通过在每个时间步对隐藏层元素进行加权来增强重要特征对预测模型的影响。在LSTM模型的基础上引入注意力机制,开发了AT- LSTM模型,目标是实现多元时间数据的长期依赖性和隐藏相关特征的自适应学习,以使河流水质预测更加准确。

1.4 研究问题

在水质预测方面,基于 AT-LSTM 的模型比单一的LSTM模型具有更强的能力,也就是借助注意力机制的AT-LSTM模型在多元时间序列的预测性能上比传统LSTM模型更具优势。

1.5 相关机器学习模型

1.5.1 LSTM

LSTM网络适合处理和预测时间序列中间隔和延迟非常长的时间序列特征。 LSTM网络还可以有效解决传统循环神经网络中容易出现的梯度消失和梯度爆炸问题。 LSTM模型有一个输入门、一个输出门和一个遗忘门,用于修改记忆。输入门和输出门主要用来控制输入特征和输出内容,而遗忘门主要用来决定记忆单元中哪些记忆应该保留,哪些记忆可以忘记。 LSTM的结构如图所示。

c6c05e77f776410f8aac84c4e701dc38.png

W矩阵表示各种门和记忆单元的参数矩阵,x表示输入值,h表示隐藏状态变量,主要用于存储和更新历史信息,σ和tan h表示sigmoid激活函数tan h 激活函数。一旦经过充分训练,LSTM 模型就可以提取复杂时间序列信息的特征。基于这些有效特征(来自 LSTM 模型的隐藏层信息),最终的全连接层能够将它们解码为具有合理精度的预测值。

1.5.2 注意力机制

注意力机制的本质是,对于给定的目标,生成一个权重系数并与输入相乘,以识别输入中哪些特征对目标重要,哪些特征不重要。为了实现注意力机制,我们将输入的原始数据视为〈key,value〉对,并计算Key和Query之间的相似系数。根据目标中给定任务中的查询,我们可以得到 Value 对应的权重系数,然后将权重系数与 Value 相乘得到输出。我们使用 Q、K 和 V 来表示查询、键和值,计算权重系数W的公式为:

eq?W%3Dsoftmax%28Qk%5E%7BT%7D%29%20%281%29

使用公式(1)将注意力权重系数W乘以值,得到包含注意力的输出a。eq?a%3Dattention%28Q%2CK%2CV%29%3DW%5Codot%20V%3Dsoftmax%28Qk%5E%7BT%7D%29%20%5Codot%20V
正如我们所看到的,注意力机制通过计算〈key,value〉形成注意力权重向量,然后乘以值以获得包含注意力的新输出。

73d480f2256645d6843ca128ccb7aa51.png

Attention的计算分为三步:

  1. 计算Query和key之间的相似度,得到权重,常见的相似度函数有点积、拼接、感知器;
  2. 使用 softmax函数对这些权重进行归一化;
  3. 将权重与对应的key值相乘,得到最终的attention。

注意力机制在深度学习的各个领域都有很多应用。但需要注意的是,注意力并不是一个统一的模型,而只是一种在不同应用领域具有不同来源的 Query、key 和 value 的机制。这意味着不同的领域有不同的实现方法,因此可以结合不同的问题与其他模型结合得到更好的表现。

1.6 模型结构

该模型的主要思想是通过对神经网络隐含层元素进行自适应加权,减少无关因素对结果的影响,突出相关因素的影响,从而提高预测精度。主要组成部分是LSTM层和注意力层,模型框架图如下图所示。

ce5a18467381456c85b699f581a5635d.png

将全连接层的输出通过softmax激活函数得到归一化的相似度权重。权重与输入层相乘来计算最终的注意力。扁平化层用于将输入“扁平化”,即将多维输入变成一维输入。模型的超参数设置在一定程度上影响其水质预测的性能。

本研究提出的AT-LSTM模型与传统LSTM模型相比的不同之处在于增加了注意力层,而其他主要结构相同。此外,模型是在相同的超参数下训练的,这有助于我们比较模型。根据上述原理,模型在过去的拟合结果的基础上进行学习,利用LSTM带记忆的特性来优化水质预测,最后通过全连接层激活后输出。水质数据综合预测算法的具体流程如下:

e05db05424d148a38ba8e18a1ccee53c.png

1.7 AT-LSTM优于LSTM的方面

  • AT-LSTM比LSTM模型预测更加准确。因为注意力机制根据隐藏相关特征的不同重要性级别,为神经网络的隐含层元素分配相应的权重。因此,在LSTM模型相同的参数下,AT-LSTM模型可以更好地拟合DO的真实值,减小预测误差,提高模型的准确性。
  • AT-LSTM模型比LSTM模型表现出更好的预测和更强的泛化能力。
  • AT-LSTM模型在多元时间序列的预测性能上比传统LSTM模型更具优势,这再次说明注意力机制可以提高 AT-LSTM 模型在多元时间序列预测中的有效性和准确性

1.8误差计算方法

1.8.1 MAE

平均绝对误差MAE(mean absolute error),表示预测值和观测值之间绝对误差的平均值,其计算公式如下:

eq?MAE%3D%5Cfrac%7B%5Csum_%7Bi%3D1%7D%5E%7Bn%7D%5Cleft%20%7C%20y_%7Bi%7D-x_%7Bi%7D%20%5Cright%20%7C%7D%7Bn%7D

eq?y_%7Bi%7D表示观测值,eq?x_%7Bi%7D表示预测值。

它只是散点图中每个点与 Y=X 线之间的平均绝对垂直或水平距离。换言之,MAE 是 X 和 Y 之间的平均绝对差值。此外,每个误差对 MAE 的贡献与误差的绝对值成正比。

MAE 的计算步骤如下:

  1. 对于每个观测值,计算模型的预测值。
  2. 对于每个观测值,计算预测值与实际观测值之间的差异的绝对值。
  3. 对所有差异值进行求和,并除以观测值的总数,得到平均差异值,即 MAE。

MAE 的数值与原始观测值的单位相同。它表示模型预测值与实际观测值之间差异的平均大小,较小的 MAE 表示模型的预测值与实际观测值之间的差异较小,即模型的拟合程度较好。MAE 的优点是它对异常值的影响较小,因为它使用了差异的绝对值,不受正负方向的影响。

MAE代码实现:

#计算平均绝对误差MAE
def calculate_the_MAE(predicted_data,actual_data):
    
    #predicted_data : 预测数据(一维列表)
    #actual_data : 真实数据(一维列表)
      
    # 定义一个变量用于存储所有样本的绝对误差之和
    the_sum_of_error = 0
    # 开始逐渐遍历每一个样本
    for i in range(len(actual_data)):
        # 不断累加求和,计算所有样本的绝对误差之和
        the_sum_of_error += abs(predicted_data[i]-actual_data[i])
    # 计算所有样本的平均绝对误差
    MAE = the_sum_of_error/float(len(actual_data))
    return MAE
 
if '__main__' == __name__:
    # 定义一组真实数据
    actual_data =    [1,2,3,4,5,6,7,8,9,10]
    # 定义一组预测数据
    predicted_data = [2,4,3,5,4,6,5,7,6,8]
    # 调用calculate_the_MAE函数计算平均绝对误差
    Mean_Absolute_Error = calculate_the_MAE(predicted_data, actual_data)

1.8.1 RMSE

均方根误差 RMSE(root mean squared error),也有资料称为RMSD,也可以测量误差的平均大小,它是预测值和实际观测之间平方差异平均值的平方根,RMSE计算公式如下:

eq?RMSE%5Csqrt%7B%5Cfrac%7B%5Csum_%7Bt%3D1%7D%5E%7BT%7D%28%5Chat%7By%7D_%7Bt%7D-y_%7Bt%7D%29%5E%7B2%7D%7D%7BT%7D%7D

eq?%5Chat%7By%7D_%7Bt%7D表示真实值,eq?y_%7Bt%7D表示预测值。

均方根误差算的是观测值与其真值,或者观测值与其模拟值之间的偏差,而不是观测值与其平均值之间的偏差。

RMSE 的计算步骤如下:

  1. 对于每个观测值,计算模型的预测值。
  2. 对于每个观测值,计算预测值与实际观测值之间的差异,并将其平方。
  3. 对所有差异值进行求和,并除以观测值的总数,得到平均差异值。
  4. 取平均差异值的平方根,即为 RMSE。

RMSE 的数值与原始观测值的单位相同,常用来作为机器学习模型预测结果衡量的标准。均方根误差是为了说明样本的离散程度,做非线性拟合时,RMSE越小越好。RMSE 的优点是对较大误差值有较大的惩罚,因为它对差异值进行了平方操作。这可以避免较大误差值对拟合度的影响过大。


RMSE代码实现:

from math import sqrt  #导入包计算平方根

#计算均方根误差
 def calculate_the_RMSE(predicted_data,actual_data):

    #predicted_data : 预测数据(一维列表)
    #actual_data : 真实数据(一维列表)
 
    # 定义一个变量用于存储所有样本的平方误差之和
    the_sum_of_error = 0
    # 开始逐渐遍历每一个样本
    for i in range(len(actual_data)):
        # 计算预测数据与真实数据的误差
        predition_error = predicted_data[i]-actual_data[i]
        # 不断累加求和,计算所有样本的平方误差之和
        the_sum_of_error += predition_error**2
    # 计算所有样本的均方根误差
    RMSE = sqrt(the_sum_of_error/float(len(actual_data)))
    return RMSE
 
if '__main__' == __name__:
    # 定义一组真实数据
    actual_data =    [1,2,3,4,5,6,7,8,9,10]
    # 定义一组预测数据
    predicted_data = [2,4,3,5,4,6,5,7,6,8]
    # 调用calculate_the_RMSE函数计算均方根误差
    rmse = calculate_the_RMSE(predicted_data, actual_data)

2. 基于PyTorch搭建LSTM+注意力机制模型

模型结构采用串行结构,首先会将时序序列数据导入到LSTM层进行提取时序信息,然后再将LSTM的输出送入到注意力机制模块中计算权重获得最终的输出,然后将注意力机制的输出经过展开处理送入到全输出层进行映射。

    timestep = 1  # 时间步长,就是利用多少时间窗口
    batch_size = 16  # 批次大小
    feature_size = 1  # 每个步长对应的特征数量,这里只使用1维
    num_heads = 1 # 注意力机制头的数量
    hidden_size = 64 # lstm隐层维度
    num_layers = 2 # lstm层数
    output_size = 1  # 由于是单输出任务,最终输出层大小为1

class LSTM_Attention(nn.Module):
    def __init__(self, feature_size, timestep, hidden_size, num_layers, num_heads, output_size):
        super(LSTM_Attention, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        
        # LSTM层
        self.lstm = nn.LSTM(feature_size, hidden_size, num_layers, batch_first=True)
        
        # 注意力层
        self.attention = nn.MultiheadAttention(embed_dim=hidden_size, num_heads=num_heads, batch_first=True, dropout=0.8)
        
        # 输出层
        self.fc1 = nn.Linear(hidden_size * timestep, 256)
        self.fc2 = nn.Linear(256, output_size)
        
        # 激活函数
        self.relu = nn.ReLU()
        
    def forward(self, x, hidden=None):
        batch_size = x.shape[0] # 获取批次大小
        
        # 初始化隐层状态
        if hidden is None:
            h_0 = x.data.new(self.num_layers, batch_size, self.hidden_size).fill_(0).float()
            c_0 = x.data.new(self.num_layers, batch_size, self.hidden_size).fill_(0).float()
        else:
            h_0, c_0 = hidden
            
        # LSTM运算
        output, (h_0, c_0) = self.lstm(x, (h_0, c_0)) # output[32, 20, 64]
        
        # 注意力计算
        attention_output, attn_output_weights = self.attention(output, output, output)
        #print(attention_output.shape) 
        # [32, 20, 64]
        #print(attn_output_weights.shape)
        # [20, 32, 32]
        
        # 展开
        output = attention_output.flatten(start_dim=1) # [32, 1280]

        # 全连接层
        output = self.fc1(output) 
        # [32, 256]
        output = self.relu(output)
        
        output = self.fc2(output) 
        # [32, output_size]
        
        return output

3. Self-supervised learning(自监督学习)

当我们做监督学习时,我们只有一个模型,这个模型的输入是x,输出是y。假设做分类问题的时候,我们需要对输入的内容进行label进行分类,因此需要有标签和数据来训练监督模型。有监督学习和无监督学习最主要的区别在于模型在训练时是否需要人工标注标签信息

  • 监督学习利用大量的标注数据来训练模型,模型的预测和数据的真实标签产生损失后进行反向传播(计算梯度、更新参数),通过不断的学习,最终可以获得识别新样本的能力。
  • 无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类相关的任务。

在supervised任务中,当数据没有label的时候,则将无label数据分成两部分,一部分作为输入,一部分作为label,然后将x^{'}放入model进行学习,得到y,这个y要越接近x^{''}越好,这就是self-supervised 。Self-supervised学习也是一种无监督的学习方法。但之所以叫Self-supervised Learning,是为了让定义更清晰。

3.1 BERT模型

我们可以通过BERT模型学习自监督学习的几种训练方式

BERT任务一:预测盖住的字

BERT的架构与Transformer Encoder是一样的,它主要用于自然语言处理、文字处理等,BERT可以输入一行向量,然后输出另一行向量,输出的长度与输入的长度相同。采用之前学习sequence-to-sequence里面的例子,在输入的文字序列中把某个字随机盖掉,被遮盖的部分是随机的,具体而言,盖住的做法有两种,两种方法都可以随机使用。

  • 第一种:MASK,即完全抹掉这个字,用一个special token即字典里没有的字代替;
  • 第二种:Random,即随机生成一个汉字替代抹掉的字。

将Sequence输入BERT模型,就会对应另外的Sequence输出。盖住的输入位置依然会有一个输出Vector,如上图,把盖住部分所对应的输出做一个线性变换(乘以一个矩阵),然后做softmax得到一个输出分布(一个非常长的向量,包含了所有的文字,每一个字都对应一个分数)。

训练的时候我们是知道被mask的字是什么,但是放入的模型不知道。盖住的字作为ground truth,bert学习的目标就是使最后softmax输出的所有汉字中,“湾”字的值和真实的“湾”越接近越好(通过minimize cross entropy)。讲的更简单其实就相当于做一个分类问题,只是类别数目很多。

BERT任务二:预测句子是否为上下句

从数据集中拿出两个句子sentence1sentence2,在两个句子中加入两个特殊符号,CLS代表开头,SEP代表分隔,将这两个句子和两个特殊符号拼成一个sequence输入到BERT里面,会输出另一个序列,但是我们只取CLS对应的输出,再将输出的向量做一个线性变换(即乘上一个矩阵),得到的结果为Yes或No,实际要做的就是一个二分类的问题,Yes代表两个句子是相接的,No则代表不相接。

结合BERT训练的两个任务来说,BERT它学会了如何填空。BERT的神奇之处在于,在你训练了一个填空的模型之后,它还可以用于其他任务。这些任务不一定与填空有关,也可能是完全不同的任务,但BERT仍然可以用于这些任务,这些任务是BERT实际使用的任务,它们被称为Downstream Tasks(下游任务)。

总之,BERT只是学习填空,但它就像胚胎中的干细胞,它有各种无限的潜力,当给它不同的数据就可以通过BERT衍生出多种任务需要的模型,也就是各种Downstream Tasks 。BERT分化成各种任务的功能细胞,被称为Fine-tune(微调)。也就是当我们有一个BERT,然后对这个BERT进行了微调,使它能够完成某种任务,与微调相反,在微调之前产生这个BERT的过程称为预训练。生成BERT的过程就是Self-supervised学习,但是也可以称之为预训练。

总结

本周阅读的这篇论文,以水质监测影响因素的周期性、非线性、数据长序列性等为前提,提出的主要观点为借助注意力机制的AT-LSTM模型在多元时间序列的预测性具有很大的优势。将LSTM模型得到的结果再通过注意力机制进行自适应加权,减少无关因素对结果的影响,突出相关因素的影响,从而提高预测精度。通过AT-LSTM模型也重新复习了之前学过的注意力机制和LSTM模型,并对模型之间的巧妙结合有了新的认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值