Datawhale X 李宏毅苹果书 AI夏令营第五期 DL进阶方向 Task3笔记

news2024/11/14 18:39:32

Datawhale X 李宏毅苹果书 向李宏毅学深度学习(进阶) 是 Datawhale 2024 年 AI 夏令营第五期的学习活动(“深度学习 进阶”方向

       往期task1链接:深度学习进阶-Task1

       往期task2链接:深度学习进阶-Task2

       我做的task1的笔记博客:传送门

       我做的task2的笔记博客:传送门

       Datawhale官方的task3链接:Task3

       Github-《深度学习详解》开源地址:传送门

《深度学习详解》主要内容源于《机器学习》(2021年春),选取了《机器学习》(2017年春) 的部分内容,在这些基础上进行了一定的原创,补充了不少除这门公开课之外的深度学习相关知识。为了尽可能地降低阅读门槛,笔者对这门公开课的精华内容进行选取并优化,对所涉及的公式都给出详细的推导过程,对较难理解的知识点进行了重点讲解和强化,以方便读者较为轻松地入门。

       在理论严谨的基础上,本书保留了公开课中大量生动有趣的例子,帮助读者从生活化的角度理解深度学习的概念、建模过程和核心算法细节,包括——

  • 卷积神经网络、Transformer、生成模型、自监督学习(包括 BERT 和 GPT)等深度学习常见算法,

  • 对抗攻击、领域自适应、强化学习、元学习、终身学习、网络压缩等深度学习相关进阶算法。


目录

批量归一化

特征归一化

标准差

考虑深度学习 

测试时的批量归一化

内部协变量偏移

批量归一化的作用

批量归一化的局限性

卷积神经网络

卷积神经网络的核心思想

卷积神经网络的结构

卷积神经网络的应用

个人思考与实践

实践代码


批量归一化

       批量归一化(Batch Normalization, BN)是一种常用的深度学习技术,它可以加速神经网络的训练过程,并提高模型的稳定性。下面将详细介绍 BN 的原理和作用。

特征归一化

       特征归一化是将特征值缩放到一个固定的范围,例如将特征的均值变为 0,方差变为 1。这样做可以加速神经网络的训练过程,并提高模型的稳定性。下图是Z值归一化:

标准差

       标准差是衡量一组数据离散程度的指标。标准差越大,说明数据越分散;标准差越小,说明数据越集中。

考虑深度学习 

       在深度学习中,每层神经网络的输出可以看作是下一层的输入。因此,需要对每层神经网络的输出进行特征归一化,以确保特征的分布是稳定的。批量归一化也可以理解成为网络的一部分

测试时的批量归一化

       在测试时,由于没有批量数据,无法进行批量归一化。因此,需要使用训练时计算出的移动平均值来代替批量均值和标准差。

内部协变量偏移

       内部协变量偏移是指神经网络内部的特征分布会随着训练过程而发生变化。这种变化会使得梯度下降算法难以收敛,并导致训练过程不稳定。

批量归一化的作用

       批量归一化可以有效地解决内部协变量偏移问题,并具有以下作用:

  • 加速训练过程:批量归一化可以加速神经网络的训练过程,并减少训练时间。
  • 提高模型稳定性:批量归一化可以提高神经网络的稳定性,并减少模型对超参数的敏感性。
  • 提高模型性能:批量归一化可以提高神经网络的性能,并提高模型的准确率。
批量归一化的局限性

       批量归一化也存在一些局限性:

  • 对小型数据集不友好:批量归一化需要足够大的批量数据才能有效地进行归一化。对于小型数据集,批量归一化的效果可能不佳。
  • 无法处理在线学习:批量归一化无法处理在线学习,即无法在每一步迭代中使用新的数据进行训练

卷积神经网络

卷积神经网络的核心思想

       CNN 的核心思想在于利用图像的局部特征和模式重复性,通过以下三个观察进行简化:

       观察 1:检测模式不需要整张图像

  • 图像识别任务中,识别物体通常不需要关注整张图像,而是关注图像中包含关键特征的局部区域。

  • 这启发我们使用感受野的概念,即每个神经元只关注图像的一小部分区域,而不是整张图像。

Q:感受野一定要相连吗?

A:感受野通常是相连的。这是因为卷积操作的局部性质使得每个神经元的输出是基于输入数据的一个连续区域,但不一定要相连。例如,在处理一些特定任务时,可能会设计一些非局部网络结构(如Non-local Neural Networks),其中的感受野可以跨越不连续的区域,这样的设计有助于捕捉长距离依赖关系。

       观察 2:同样的模式可能会出现在图像的不同区域

  • 图像中相同的模式可能会出现在不同的位置,例如猫的耳朵可能在图像的任何地方出现。
  • 这启发我们使用参数共享的概念,即多个神经元共享相同的参数,用于检测相同模式的重复出现。

       观察 3:下采样不影响模式检测

  • 对图像进行下采样(例如缩小图像)把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的 1/4,但是不会影响里面是什么 东西,不会改变图像中的关键模式,例如缩小后的图像仍然可以识别出是一只鸟。
  • 这启发我们使用池化(Pooling)层,通过下采样减少特征图的空间维度,从而减少计算量。
卷积神经网络的结构

CNN 通常由以下几层组成:

  • 卷积层(Convolutional Layer):包含多个卷积核,每个卷积核对输入特征图进行卷积操作,提取局部特征,并生成新的特征图。
  • 汇聚层(Pooling Layer):对卷积层生成的特征图进行下采样,减少特征图的空间维度,从而减少计算量。
  • 全连接层(Fully Connected Layer):将特征图中的所有特征连接成一个向量,并进行分类或回归操作。

卷积神经网络的应用

CNN 广泛应用于图像识别、目标检测、语义分割、视频分析等任务。例如:

  • 图像识别:识别图像中的物体类别,例如猫、狗、汽车等。
  • 目标检测:识别图像中的物体位置和类别,例如在图像中找到所有的人和汽车。
  • 语义分割:将图像中的每个像素都分配到一个类别,例如将图像分割成天空、道路、树木等区域。
  • 视频分析:分析视频中的运动和事件,例如识别视频中的动作和场景。

个人思考与实践

  • 感受野的设计:感受野的大小和步幅会影响特征提取的效果。例如,较小的感受野可以提取更精细的特征,但可能无法检测更大的模式。
  • 参数共享的优势:参数共享可以减少模型参数的数量,从而减少过拟合的风险,并加快训练速度。
  • 汇聚层的选择:最大汇聚和平均汇聚是两种常见的汇聚方式,选择哪种方式取决于具体任务的需求。
  • 深度可分离卷积:深度可分离卷积是一种更高效的卷积方式,可以减少参数数量并提高计算效率。
  • 残差网络:残差网络可以训练更深的网络,并提高模型的性能。
  • 注意力机制:注意力机制可以帮助模型关注图像中的重要区域,从而提高模型的性能。
实践代码
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

# 定义一个简单的 CNN 模型
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
        self.fc1 = nn.Linear(16 * 12 * 12, 10)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))
        x = x.view(-1, 16 * 12 * 12)
        x = self.fc1(x)
        return x

# 定义数据转换
transform = transforms.Compose([
    transforms.Resize((32, 32)),
    transforms.ToTensor()
])

# 加载训练数据
train_data = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=100, shuffle=True, num_workers=2)

# 创建模型和损失函数
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()

# 训练模型
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(10):
    for images, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

    print(f'Epoch {epoch + 1}, Loss: {loss.item()}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

惠中科技RDS自清洁膜层:光伏领域的绿色革命

惠中科技RDS自清洁膜层:光伏领域的绿色革命 在全球能源转型和光伏产业蓬勃发展的背景下,光伏电站的运营维护面临着诸多挑战,其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率,还直接影响了电站的发电效率和经济效益…

算法复盘——Leetcode hot100: 双指针算法

双指针算法 11. 盛最多水的容器 - 力扣(LeetCode) 优化解法:用 left 和 right 两个指针从两端向中心收缩,一边收缩一边计算 [left, right] 之间的矩形面积,取最大的面积值即是答案。 其实是优化区间选择 直接丢弃体…

51单片机-串口通信(单片机和PC互发数据)

作者:Whappy 时间:2024.9.3 关于串口的疑问? 根据我的代码是不是初始化完成串口之后,只要我们使用串口发送数据就会触发中断? (在文章下面) ChatGPT said: ChatGPT 是的,根据…

IDEA项目启动在不同端口的方法,服务多端口启动

前言 在本地测试分布式事务以及分布式锁的过程中,在IDEA中多端口启动服务,可以高效方便开展测试调试工作。 开启流程 1.打开Edit Configurations 2.选中要复制的服务,点击复制小图标 3.配置启动端口号,点击保存 --server.port1…

解密Docker核心:深入理解Docker基础架构

随着云计算技术的普及,Docker容器技术在现代应用开发和部署中占据了重要地位。要充分理解Docker的优势与运用,深入掌握其基础架构是关键。本文将深入探讨Docker的核心组成部分及其在容器化平台中的角色和作用。 一、Docker的基础架构概述 Docker的基础…

leetcode 2816.翻倍以链表形式表示的数字

1.题目要求: 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。将链表 翻倍 后,返回头节点 head 。2.题目代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ str…

AI建模——文/图生模型产品介绍与模型免费下载

说明: 记录AI文生3D模型、图生3D模型的相关产品;记录其性能、功能、收费与免费方法 1.AI建模产品 Robin MeshAnything Meshy 生成效果比较: 2. Rodin 官网:gHyperHuman 支持:文生模型、图生模型 模型生成与下载…

自动控制:模糊控制器的原理及设计

自动控制:模糊控制器的原理及设计 引言 随着控制技术的不断发展,模糊控制器(Fuzzy Controller)作为一种智能控制技术,广泛应用于许多复杂系统中。与传统的线性控制器不同,模糊控制器无需精确的数学模型&a…

IOS17.0安装巨魔:TrollRestore巨魔发布

👻 TrollRestore 17.0 巨魔发布 15.0 - 16.7 RC(20H18)和17.0。 官网:https://trollrestore.com/ 下载:https://pan.metanetdisk.com/IOS/%E5%B7%A8%E9%AD%94%E7%8E%A9%E5%AE%B6/TrollRestore.com 使用:ht…

《OpenCV计算机视觉》—— 图像边缘检测

文章目录 一、图像边缘检测概述二、常见的图像边缘检测算法(简单介绍)1.sobel算子2.Scharr算子3.Laplacian算子4.Canny算子 三、代码实现 一、图像边缘检测概述 图像边缘检测是一种重要的图像处理技术,用于定位二维或三维图像中对象的边缘。…

【运维监控】prometheus+node exporter+grafana 监控linux机器运行情况(1)

本示例是通过prometheus的node exporter收集主机的信息,然后在grafana的dashborad进行展示。本示例使用到的组件均是最新的,下文中会有具体版本说明,linux环境是centos。本示例分为四个部分,即prometheus、grafana、node exporter…

南京网站建设自己网站

南京是一座古老而又现代化的城市,拥有悠久的历史和文化底蕴。在这个信息时代,网站已经成为了企业和个人宣传推广的重要途径之一。南京网站建设作为一种推广方式,不仅能够展示企业形象,还能够传递信息、吸引客户、增加销售。 南京网…

Spring Boot-自定义banner

在 Spring Boot 应用中,你可以自定义启动时显示的 banner。这些 banner 可以包括图形、文字或者其他形式的标识。如图所示: 1. 使用 banner.txt 文件 默认情况下,Spring Boot 使用项目的 banner.txt 文件中的内容作为启动时的 banner。你可以…

计算机岗位(面试)

计算机岗位(面试) 计算机主要有哪几部分构成?计算机组成原理的内容? 计算机主要由‌硬件和软件‌两大部分构成。‌硬件部分包括五大基本组件:‌‌运算器、‌控制器、‌存储器、‌输入设备和输出设备‌‌。‌具体来说&a…

用户变渠道,Xinstall引领手游推广新潮流

随着手游市场的日益繁荣,手游推广方式也在不断革新。从传统的地推、广告投放到如今新兴的CPA(按动作付费)和CPS(按销售订单付费)模式,手游推广正逐步走向效果导向的时代。而在这个过程中,Xinsta…

云计算41——部署project_exam_system项目(续)

# 创建脚本,可以在java环境中运行任何的jar包或者war包 #!/bin/bash /usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析 (1)nginx 1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ 2、启…

关于电力系统的几个疑问

非电力专业人员对于电力中的某些知识不能够形成系统的认识,接下有空也有补充下这方面知识,吹水时候才有水可以吹,嘻嘻!这里舍不得删掉下边chatgpt这几张图片,暂时先保留着。因为一直有个因为在电网里边用发电端和用电端…

【笔试强训】—— BM1 反转链表

🌏博客主页:PH_modest的博客主页 🚩当前专栏:笔试强训 💌其他专栏: 🔴每日一题 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

【从头写CAD】3 长度类

文章目录 一、说明二、源码三、运行和调试结果 一、说明 长度的国际单位是“米”(符号“m”),常用单位有毫米(mm)、厘米(cm)、分米(dm)、千米(km&#xff09…

装WebVideoCreator记录

背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js https://github.com/Vinlic/WebVideoCreatorWebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安…