当前位置: 首页 > article >正文

第十周:机器学习笔记

第十周机器学习周报

  • 摘要
  • Abstract
  • 机器学习——self-attention(注意力机制)
    • 1. 为什么要用self-attention
    • 2. self-attention 工作原理
      • 2.1 求α的两种方式
      • 2.2 attention-score(关联程度)
  • Pytorch学习
    • 1. 损失函数代码实战
      • 1.1 L1loss(绝对值平均差)
      • 1.2 MSELoss(均方误差)
      • 1.3 CrossEntropyLoss(交叉熵损失)
    • 2. 反向传播算法代码实战
  • 总结

摘要

这一周作者主要对注意力机制进行了学习,其中了解了引入注意力机制的原因、注意力机制的使用场景以及注意力机制的原理,此外在pytorch的学习中,作者对三种计算损失函数的方式,比如,绝对平均值误差、均方误差、交叉熵损失进行了代码实战学习。

Abstract

During this week, attention mechanisms were studied. The reasons for introducing attention mechanisms, the scenarios in which they are utilized, and the principles of attention mechanisms were understood. Additionally, in the study of PyTorch, practical coding exercises were conducted on three approaches to calculating loss functions, namely, absolute mean error, mean squared error, and cross-entropy loss.

机器学习——self-attention(注意力机制)

1. 为什么要用self-attention

我们之前学习的案例的输入都是只有1个vector
但是世界那么复杂
总会有多个很长的vector或者每次input的vector的个数不是固定的时候
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. self-attention 工作原理

在这里插入图片描述
在这里插入图片描述

2.1 求α的两种方式

在这里插入图片描述

2.2 attention-score(关联程度)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Pytorch学习

1. 损失函数代码实战

前面的学习周报我们学习了损失函数,所以这周我们需要在Pytorch中学习它,顺便做一个复习。
在这里插入图片描述
损失函数就是用来衡量误差的,因为我们在训练的时候,有实际值和训练出来的值。我们要知道模型训练出来的结果的好坏,就需要用损失函数来进行衡量,从而不断优化我们的模型参数,使其效果更好。
例如,拿我们平时的做试卷的答题来说,output就是答题结果;而target为卷面分数。
因此LOSS告诉我们离满分还有70分的差距。
其功能一就是:告知我们输出结果与目标之间差距
在这里插入图片描述
经过损失函数我们知道了我们需要提升的地方(例如:加强解答题的训练),于是我们下一次解答题提高了10分。
其功能二就是:为模型的改进提供依据,其是通过反向传播完成的
在这里插入图片描述
常见的损失函数如下
其中大多数都在我们之前的周报内容中学习过,如下图所示:在这里插入图片描述

1.1 L1loss(绝对值平均差)

MAE,之前的周报有说过,就不详细说了
详情如下:
其中要注意reduction
为mean就是求所有的L(误差)平均值,为sum就所有的L(误差)求和
默认为mean
在这里插入图片描述
其中特别要注意这里的shape,target要与input一致
在这里插入图片描述

import torch

from torch import nn

inputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)

inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))

loss = nn.L1Loss()
result = loss(inputs, targets)

print(result)

在这里插入图片描述

1.2 MSELoss(均方误差)

就是求差再平方
reduction意义同上
在这里插入图片描述
代码如下:

import torch

from torch import nn

inputs = torch.tensor([1, 2, 3], dtype=torch.float32)
targets = torch.tensor([1, 2, 5], dtype=torch.float32)

inputs = torch.reshape(inputs, (1, 1, 1, 3))
targets = torch.reshape(targets, (1, 1, 1, 3))

# 均方误差
loss2 = nn.MSELoss()
result2 = loss2(inputs, targets)

print(result2)

在这里插入图片描述

1.3 CrossEntropyLoss(交叉熵损失)

这个比较复杂,但是之前的周报中也有讲过

常用于分类问题中,分类问题有C个类(如CIFAR-10有10个类别)
计算公式如下:
在这里插入图片描述
公式解释如下:
比如有3分类问题,dog、person、cat
在这里插入图片描述
log主要是为了增强分类效果
因为当为[0.8,0.9,0.7]的时候,不加入log就差距不大,分类效果就差
代码如下:

import torch
from torch import nn
# 交叉熵损失
x = torch.tensor([0.1, 0.2, 0.3])
y = torch.tensor([1])
x = torch.reshape(x, (1, 3))
loss_cross = nn.CrossEntropyLoss()

result_cross = loss_cross(x, y)
print(result_cross)

在这里插入图片描述
在计算器中的结果一致,证明我们的理解没有偏差
log函数默认以自然对数10为底,而在matlab中log函数默认以自然对数e为底
在这里插入图片描述

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

datasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),
                                        download=True)

dataloader = DataLoader(datasets, batch_size=1)


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.model1 = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 64, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Flatten(),
            nn.Linear(1024, 64),
            nn.Linear(64, 10),
        )

    def forward(self, x):
        x = self.model1(x)
        return x


net = Net()
for data in dataloader:
    images, labels = data
    outputs = net(images)
    print(outputs)
    print(labels)

回顾一下CIFAR-10数据集:

FAR-10是一个更接近普适物体的彩色图像数据集。
CIFAR-10 是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever整理的一个用于识别普适物体的小型数据集。
一共包含10 个类别的RGB 彩色图片:
飞机( airplane )
汽车( automobile )
鸟类( bird )
猫( cat )
鹿( deer )
狗( dog )
蛙类( frog )
马( horse )
船( ship )
卡车( truck )。CIFAR-10数据集中每个图片的尺寸为32 × 32 ,每个类别有6000个图像,数据集中一共有50000 张训练图片和10000 张测试图片。

其索引以及其种类对应关系如下:
在这里插入图片描述
上代码输出结果:
在这里插入图片描述
可以发现这种形式的输出十分符合我们CrossEntropy的形式
输入如下代码:

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

datasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),
                                        download=True)

dataloader = DataLoader(datasets, batch_size=1)


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.model1 = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 64, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Flatten(),
            nn.Linear(1024, 64),
            nn.Linear(64, 10),
        )

    def forward(self, x):
        x = self.model1(x)
        return x


# 引入交叉熵损失函数
loss_cross = nn.CrossEntropyLoss()

net = Net()
for data in dataloader:
    images, labels = data
    outputs = net(images)
    print(outputs)
    print(labels)
    # 让结果经过一次损失函数
    result_loss = loss_cross(outputs, labels)
    print(result_loss)

其中某一张图片的结果如下:
经过交叉熵损失后,其结果为2.3372
在这里插入图片描述

2. 反向传播算法代码实战

反向传播复习:
原理:基于链式求导法则
所谓反向传播,就如下图所示:
因为我们计算L对y的偏导很难计算,所以我们要从结果往前推导
在这里插入图片描述

import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

datasets = torchvision.datasets.CIFAR10(root='./datasets', train=False, transform=torchvision.transforms.ToTensor(),
                                        download=True)

dataloader = DataLoader(datasets, batch_size=1)


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.model1 = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 32, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Conv2d(32, 64, 5, 1, 2),
            nn.MaxPool2d(2, 2),
            nn.Flatten(),
            nn.Linear(1024, 64),
            nn.Linear(64, 10),
        )

    def forward(self, x):
        x = self.model1(x)
        return x


# 引入交叉熵损失函数
loss_cross = nn.CrossEntropyLoss()

net = Net()
for data in dataloader:
    images, labels = data
    outputs = net(images)
    print(outputs)
    print(labels)
    # 让结果经过一次损失函数
    result_loss = loss_cross(outputs, labels)
    # 反向传播
    result_loss.backward()
    print(result_loss)

可以看到,这里的grad(梯度)属性是有数值的。
在这里插入图片描述

总结

这一周因为开学,人在学校途中的原因,所以学习的内容相比之下少了很多。
作者主要对注意力机制进行了学习,其中了解了引入注意力机制的原因、注意力机制的使用场景以及注意力机制的原理,还学会了计算关联系数α的两种方法,分别是点积和additive,并学会了求attention-score(关联程度)与soft-max求出α‘,结合参数v,最后求和得到b
此外在pytorch的学习中,作者对三种计算损失函数的方式,比如,绝对平均值误差、均方误差、交叉熵损失进行了代码实战学习,对三种常用的loss function进行回顾,并代码实战。
希望开学后要加快学习的进度,继续学习注意力机制和李宏毅机器学习后面的视频以及pytorch中的反向传播的代码学习、以及优化器的代码实战。


http://www.kler.cn/news/289341.html

相关文章:

  • 微信小程序代码 app.json文件详细介绍
  • Apifox使用学习
  • 【华为OD】2024D卷——剩余银饰的重量
  • [CISCN2019 华东南赛区]Web111
  • Java面向对象与继承
  • 【C++】手动实现队列的封装(C++)
  • 基于纠错码的哈希函数构造方案
  • 977.有序数组的平方
  • 边缘计算工业网关可以为工业企业生产提供哪些价值应用?天拓四方
  • 如何禁用USB存储设备|禁用USB储存和连接手机的方法有哪些?深度解析,四招搞定!
  • Kafka:浅谈对Kafka的认识
  • spring之bean和配置相关注解
  • 论文解读:Prompt-aligned Gradient for Prompt Tuning
  • 论文《Improving your graph neural networks:A High-Frequency Booster》笔记
  • 构造+模拟,CF 873D - Merge Sort
  • 水平垂直居中的方式
  • Nginx - Rewirte
  • 【GPT】Coze使用开放平台接口-【5】API 调用
  • 15、Django Admin添加自定义字段功能
  • 宠物勺子秤芯片解决方案CSU8RP1186
  • 机器学习(五) -- 监督学习(8) --神经网络2
  • 苹果系统中如何安装Python和PyCharm
  • 低代码用户中心的构建与应用
  • 计算机毕业设计PySpark深度学习动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Vue3 数据通信
  • 计算机网络 第1章 概述
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试9月3日升级新模型预测第71弹
  • 大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
  • Meshy-4:AI驱动3D建模的革命性工具,解锁虚拟创作新高度
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)