type
status
date
slug
summary
tags
password
category
Property
Mar 27, 2024 02:04 AM
icon
1. 绪论
参考书有《动手学深度学习》、《Python深度学习》、《深度学习和神经网络》,基于百度Paddle框架、Pytorch
d2l全书框架如下:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F89a62464-e490-4bd1-bb66-7b22dc72c8fb%2FUntitled.png?table=block&id=caadbb46-2090-43e9-8dd0-ab65bdf54bc7&t=caadbb46-2090-43e9-8dd0-ab65bdf54bc7&width=789&cache=v2)
解释深度学习:深度学习是机器学习的一个分支,指从有限样例中通过算法总结出一般性的规律,并可用于新的未知数据上。
神经网络可以看作从输入到输出的信息处理系统,一组参数控制的复杂函数
人工智能的许多子学科:机器感知(计算机视觉、语音信息处理)、学习(模式识别、机器学习、强化学习)、语言(自然语言处理)、记忆(知识表示)、决策(规划、数据挖掘)等。
首先学会导包
深度学习3大硬骨头:卷积神经网络,循环神经网络,对抗式神经网络
一些要了解的点:Numpy的广播机制,梯度下降对学习率敏感,神经网络中的共享参数,动量优化法,梯度消失或爆炸
- 人工智能的数学基础:可以看欧姆社学习漫画
- 理论上有可能利用chatGPT的预训练模型,在比较有限的数据集上,FineTuning(在AI领域中,Fine-tuning(微调)是指使用预训练模型作为起点,通过在特定任务上进行少量的训练来调整模型的参数,使其适应于特定任务或领域。)出一个垂直细分领域的AI应用,性能超越ChatGPT
- 一般在反向传播之前,梯度清零
- 需要学习的内容:
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fafb64ba8-4fa0-41d8-948c-98ab2139efd3%2FUntitled.png?table=block&id=91ec4d14-1f3f-4fcf-9823-e2630c75bed4&t=91ec4d14-1f3f-4fcf-9823-e2630c75bed4&width=927&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F080f4cb2-e3bd-4050-a01a-3a750ccc3a41%2FUntitled.png?table=block&id=0a106cd0-988a-4942-aadb-02c1099ef028&t=0a106cd0-988a-4942-aadb-02c1099ef028&width=2318&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ff0031b4e-2605-4e46-8881-31b4d6a49f2f%2FUntitled.png?table=block&id=b812e465-f7ac-4cca-b690-04cb6816c82e&t=b812e465-f7ac-4cca-b690-04cb6816c82e&width=2423&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd26c1cae-d734-497f-b8fc-5499a897ba37%2FUntitled.png?table=block&id=8f6f9455-58b5-4afa-864b-2a6fa3268d3c&t=8f6f9455-58b5-4afa-864b-2a6fa3268d3c&width=2318&cache=v2)
- 能力要求:行业知识+AI理论+实践能力
- 互联网—>正在从高科技行业变为传统行业
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F837b334b-8acd-4522-8845-6a6885492710%2FUntitled.png?table=block&id=53dd9604-7fcb-4838-8f5e-5763ad556ff6&t=53dd9604-7fcb-4838-8f5e-5763ad556ff6&width=2337&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb652b53d-1eb3-4018-bb70-0eb7ffdc1dff%2FUntitled.png?table=block&id=0daaa333-af58-41f7-b133-108b507e5cea&t=0daaa333-af58-41f7-b133-108b507e5cea&width=2762&cache=v2)
- 对于预测问题,可以根据预测输出的类型是连续的实数值,还是离散的标签,区分为回归任务和分类任务。
- 为什么要以均方误差作为损失函数?即将模型在每个训练样本上的预测误差加和,来衡量整体样本的准确性。这是因为损失函数的设计不仅仅要考虑“合理性”(有物理意义),同样需要考虑“易解性”(易于求解)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fce38cc8c-96f0-4ec6-99c0-70ff95c314d7%2FUntitled.png?table=block&id=d5ffed19-ba3b-4c1a-b500-684979f1964d&t=d5ffed19-ba3b-4c1a-b500-684979f1964d&width=720&cache=v2)
正是由于深度学习的建模和训练的过程存在通用性,即在构建不同的模型时,只有模型三要素不同,其它步骤基本一致,才产生了深度学习框架来加速建模。
(这里的模型三要素指的是模型的结构、参数和超参数。模型结构指的是模型的层数、每层的神经元数量、激活函数等。参数指的是每个神经元之间的权重和偏置。超参数指的是训练模型时需要设定的参数,如学习率、批量大小等。)
1.3.3 数据处理
数据处理包含五个部分:数据导入、数据形状变换、数据集划分、数据归一化处理和封装
load data
函数。数据预处理后,才能被模型调用这两行代码实现了对数据的切片操作,将训练数据(training_data)中的前n-1列(即除了最后一列)赋值给变量x,将最后一列赋值给变量y。其中":"表示选取整个范围,"-"表示倒数第n个元素。
这种切片操作常用于将数据集划分为输入特征和标签数据,以便于用于模型的训练和测试。
课节5—→目标检测7日训练营
- 使用Python + Numpy编写模型并不困难,但仍然需要编写每个处理过程,如梯度下降的实现
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0fecda50-128a-4454-a96c-2453519c811a%2FUntitled.png?table=block&id=179747a0-31db-4df2-af74-94dbd266d1fb&t=179747a0-31db-4df2-af74-94dbd266d1fb&width=1839&cache=v2)
随机梯度下降:为了解决批量梯度下降低效的问题(每次计算都是基于数据集中的全量数据),每次从总的数据集中随机抽取出小部分数据来代表整体,基于这部分数据计算梯度和损失来更新参数。batch的取值会影响模型训练效果。batch过大,会增大内存消耗和计算时间,且训练效果并不会明显提升(因为每次参数只向梯度反方向移动一小步,所以方向没必要特别精确);batch过小,每个batch的样本数据将没有统计意义,计算的梯度方向可能偏差较大。案例:房价预测模型的训练数据集较小,我们将batch为设置10。
核心概念:mini-batch:每次迭代时抽取出来的一批数据被称为一个mini-batch。
batch_size:一个mini-batch所包含的样本数目称为batch_size。
epoch:当程序迭代的时候,按mini-batch逐渐抽取出样本,当把整个数据集都遍历到了的时候,则完成了一轮训练,也叫一个epoch。启动训练时,可以将训练的轮数num_epochs和batch_size作为参数传入。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F3e59d68d-cb5e-4ca8-a3e5-bb49351f2db5%2FUntitled.png?table=block&id=7350ed5e-0264-4dfa-bcd0-bb4783c279ec&t=7350ed5e-0264-4dfa-bcd0-bb4783c279ec&width=972&cache=v2)
【深度学习】基于计算图的反向传播详解(95条消息) 【深度学习】基于计算图的反向传播详解_计算图的反向传播是基于链式法则的数学原理_Day-yong的博客-CSDN博客
在探讨手写数字识别任务的实现方案之前,我们先“偷偷地看”一下程序代码。不难发现,与上一章学习的房价预测任务的代码比较,二者的程序结构是极为相似的,如图所示。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0e1584dc-e41d-4fe1-a163-892e5ccca409%2FUntitled.png?table=block&id=d034f194-ccdc-448c-800c-dee118ff0178&t=d034f194-ccdc-448c-800c-dee118ff0178&width=1799&cache=v2)
- 从代码结构上看,模型均为数据处理、定义网络结构和训练过程三个部分。
- 从代码细节来看,两个模型也很相似。
这就是使用飞桨框架搭建深度学习模型的优势,只要完成一个模型的案例学习,其它任务即可触类旁通。在工业实践中,程序员用飞桨框架搭建模型,无需每次都另起炉灶,多数情况是先在飞桨模型库中寻找与目标任务类似的模型,再在该模型的基础上修改少量代码即可完成新的任务。
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F77e4df65-aa8f-44c2-8be3-66860af49ac5%2FUntitled.png?table=block&id=44f8fb54-db34-46c2-9520-09cd6dbe68ae&t=44f8fb54-db34-46c2-9520-09cd6dbe68ae&width=1920&cache=v2)
这类程序一般都是如下套路
- 数据处理:读取数据和预处理操作
- 模型设计:网络结构(假设)
- 训练配置:优化器(寻解算法)和计算资源配置
- 训练过程:循环调用训练过程,前向计算+损失函数(优化目标)+反向传播
- 保存模型:保存训练好的模型
- 训练集:用于确定模型参数
- 验证集:用于调节模型超参数(如多个网络结构、正则化权重的最优选择)
- 测试集:用于估计模型应用效果(没有在模型中应用过的数据,更贴近模型在真实场景应用的效果)
通常某组织发布一个新任务的训练集和测试集数据后,全世界的科学家都针对该数据集进行创新研究,随后大量针对该数据集的论文会陆续发表。论文1的A模型声称在测试集的准确率70%,论文2的B模型声称在测试集的准确率提高到72%,论文𝑁的𝑥模型声称在测试集的准确率提高到90% ...
然而这些论文中的模型在测试集上准确率提升真实有效么?我们不妨大胆猜测一下。假设所有论文共产生1000个模型,这些模型使用的是测试数据集来评判模型效果,并最终选出效果最优的模型。这相当于把原始的测试集当作了验证集,使得测试集失去了真实评判模型效果的能力,正如机器学习领域非常流行的一句话:“拷问数据足够久,它终究会招供”。
卷积算子应用举例
案例1—简单的黑白边界检测
案例2 图像中物体边缘检测
案例3—图像均值模糊
池化
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe4600258-189f-4e87-a2db-a534440c5e11%2FUntitled.png?table=block&id=2914b822-2291-485b-a7c5-44305c53ba31&t=2914b822-2291-485b-a7c5-44305c53ba31&width=1010&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd82f1799-e81f-471f-be94-28d25fd6d3a7%2FUntitled.png?table=block&id=85e7e01e-f32a-459d-9ed9-2eb3b30d0344&t=85e7e01e-f32a-459d-9ed9-2eb3b30d0344&width=954&cache=v2)
激活函数
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F77b45b7c-d355-4dc2-bd53-368641978a5c%2FUntitled.png?table=block&id=e7e557fe-ea25-4b5b-aa31-a3ee5d033220&t=e7e557fe-ea25-4b5b-aa31-a3ee5d033220&width=1043&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0050b70a-f0d4-4947-b0ab-fc81b9ffd8a1%2FUntitled.png?table=block&id=f58792a1-d6b2-47c1-ad61-03b9c1be1de9&t=f58792a1-d6b2-47c1-ad61-03b9c1be1de9&width=1092&cache=v2)
批归一化
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F952ceadf-61b0-4baa-bc94-14889aff9087%2FUntitled.png?table=block&id=22ef41a9-9aaa-4235-b133-e0066aaaa1c3&t=22ef41a9-9aaa-4235-b133-e0066aaaa1c3&width=1095&cache=v2)
作业1:计算卷积中一共有多少次乘法和加法操作
首先,我们需要理解卷积操作的基本概念。在卷积神经网络中,卷积操作是通过在输入数据上滑动一个卷积核(或滤波器),并在每个位置进行元素级的乘法和加法操作来计算输出的。
给定的参数是:
- 输入数据的形状是 [10, 3, 224, 224],其中10是批量大小,3是输入通道数,224是高度和宽度。
- 卷积核的大小是 3x3,输出通道数为64。
- 步幅(stride)是1,填充(padding)是1。
对于每个输出通道,我们需要在每个位置进行3x3x3=27次乘法和26次加法(因为3x3x3个元素需要2x3x3次加法来求和)。由于步幅是1,填充是1,所以输出的高度和宽度都是224,因此每个输出通道有224x224个位置。所以,对于每个输出通道,我们需要进行27x224x224次乘法和26x224x224次加法。
由于输出通道数为64,所以总共需要进行64x27x224x224次乘法和64x26x224x224次加法。
因此,完成这样一个卷积,一共需要做:
- 乘法操作次数:64 * 27 * 224 * 224 = 173408256次
- 加法操作次数:64 * 26 * 224 * 224 = 1605638144次
这只是理论上的计算次数,实际上由于现代计算机硬件和软件的优化,实际的计算次数可能会少一些。
作业2:
网络结构定义如下面的代码所示,输入数据形状是[10,3,224,224],
请分别计算每一层的输出数据形状,以及各层包含的参数形状
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fa88f11ca-5268-4cdf-9ec3-7537d6245e33%2FUntitled.png?table=block&id=76c6d4d5-b6ec-4d83-ad73-629991a70de8&t=76c6d4d5-b6ec-4d83-ad73-629991a70de8&width=1272&cache=v2)