读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营

2024-08-28 02:44

本文主要是介绍读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 🚩学习目标:
  • 🚩学习内容:
  • 🚩 Task1:
    • 🎯机器学习(Machine Learning,ML)和深度学习(Deep Learning,DL)的基本概念
    • 🎯什么是回归(regression)
    • 🎯什么是分类(classification)
    • 🎯什么是结构化学习
    • 🎯机器学习找函数的三个步骤
      • 📌 第1个步骤是写出一个带有未知参数的函数`f`,其能预测未来观看次数。
      • 📌第2个步骤是定义损失(loss),损失也是一个函数。
      • 📌机器学习的第 3 步:解一个最优化的问题。
    • 🎯为什么损失可以是负的?
    • 🎯梯度下降有一个很大的问题
  • 🚩Task 2 :
    • 🎯线性模型
      • 📌分段线性曲线
      • 📌如何表示方程
        • 💡优化是找一个可以让损失最小的参数,是否可以穷举所有可能的未知参数的值?
        • 💡刚才的例子里面有 3 个 Sigmoid,为什么是 3 个,能不能 4 个或更多?
      • 📌定义损失
      • 📌实现上的细节
        • 💡批量(batch)
        • 💡回合(epoch)
    • 🎯模型变形

🚩学习目标:

  • Task 1 《深度学习详解》- 1.1 通过案例了解机器学习
  • Task 2 《深度学习详解》- 1.2 了解线性模型
  • Task 3 《深度学习详解》- 2 机器学习框架&实践攻略
  • (选修)《深度学习详解》- 3.6 分类&损失函数
  • (选修)实践任务:HW2(DNN)

🚩学习内容:

欢迎去大家各大电商平台选购纸质版苹果书《深度学习详解》
基于上述书籍拓展

引用内容为书本原话 图片基本上来源于书中
我以自问自答的方式输出内容


🚩 Task1:


🎯机器学习(Machine Learning,ML)和深度学习(Deep Learning,DL)的基本概念

什么是机器学习

人工智能的一个分支。机器学习范畴比人工智能概念略小,深度学习的底层是神经网络。机器学习是指用计算机模拟人类学习行为的的技术用来从已知的数据中获取新的知识。

机器学习,顾名思义,机器具备有学习的能力。具体来讲,机器学习就是让机器具备找一个函数的能力。机器具备找函数的能力以后,它可以做很多事。

比如语音识别,机器听一段声音,产生这段声音对应的文字。我们需要的是一个函数,该函数的输入是声音信号,输出是这段声音信号的内容。

就是让机器的输入映射到某个函数之后可以得到输出

🎯什么是回归(regression)

随着要找的函数不同,机器学习有不同的类别。假设要找的函数的输出是一个数值,一个标量(scalar),这种机器学习的任务称为回归

机器要找一个函数 f,其输入是可能是种种跟预测 PM2.5 有关的指数,包括今天的 PM2.5 的数值、平均温度、平均的臭氧浓度等等,输出是明天中午的 PM2.5的数值,找这个函数的任务称为回归(regression)

机器要找一个函数f(x),其输入是可能是与预测目标有关的数值x,输出是对于下一次的预测值f(x),找这个函数的任务称为回归(regression)。

隐藏任务①: 找出本篇中形如回归(regression)加粗字体的术语,并用自己的话进行解释,列成表格,与学习群的其他小伙伴讨论你的理解和搜索到的相关案例

术语解释
分类将数据划分为多个离散的类别的任务,预测输入的样本所属的类别
回归通过对输入数据进行学习,建立一个连续的函数关系,预测数值型的输出结果
机器学习一种从数据中自动学习模式和模型的方法,使计算机能够根据之前的经验来进行预测或决策
深度学习一种机器学习的子领域,通过模拟人脑的神经网络结构,对大规模数据进行学习和表达复杂模式
损失衡量预测的输出与实际值之间的差异的函数,用于评估模型的训练效果
梯度下降一种优化算法,通过反复迭代的方式,沿着目标函数的负梯度方向调整模型参数的值,以最小化损失函数

🎯什么是分类(classification)

分类任务要让机器做选择题。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的选项里面选择一个当作输出,该任务称为分类。
举个例子,每个人都有邮箱账户,邮箱账户里面有一个函数,该函数可以检测一封邮件是否为垃圾邮件。分类不一定只有两个选项,也可以有多个选项。

根据某些特征把不同数据分成不同的类别。

🎯什么是结构化学习

机器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写一篇文章。这种叫机器产生有结构的东西的问题称为结构化学习。

就是根据输入的东西的某种规律生产某种相似结构的东西

🎯机器学习找函数的三个步骤

隐藏任务③:找出机器学习找函数的3个步骤!并查找资料,交叉佐证这些步骤。

机器学习找函数的过程,分成3个步骤。

📌 第1个步骤是写出一个带有未知参数的函数f,其能预测未来观看次数。

y = b + w ∗ x1,而 b 跟 w 是未知的。
带有未知的参数(parameter)的函数称为模型(model)。
模型在机器学习里面,就是一个带有未知的参数的函数,特征(feature) x 1 x_1 x1 是这个函数里面已知的,它是来自于后台的信息,2 月 25 日点击的总次数是已知的,而 w 跟 b 是未知的参数。
w 称为权重(weight),b 称为偏置(bias)。

📌第2个步骤是定义损失(loss),损失也是一个函数。

估测的值跟实际的值之间的差距,其实有不同的计算方法,计算 y 与 yˆ 之间绝对值的差距,如式 (1.6) 所示,称为平均绝对误差(Mean Absolute Error,MAE)

在这里插入图片描述

如果算 y 与 yˆ 之间平方的差距,如式 (1.7) 所示,则称为均方误差(Mean SquaredError,MSE)。
在这里插入图片描述

有一些任务中 y 和 yˆ 都是概率分布,这个时候可能会选择交叉熵(cross entropy),这个是机器学习的第 2 步。

交叉熵是信息论中用来度量两个概率分布之间差异的一种方法。在机器学习中,交叉熵经常被用来作为损失函数,用来度量预测结果与真实结果之间的差异。

对于分类问题,交叉熵可以用来度量预测结果的概率分布与真实结果的概率分布之间的差异。交叉熵的计算公式如下:

H ( p , q ) = − ∑ p ( x ) ∗ l o g ( q ( x ) ) H(p,q) = -∑ p(x) * log(q(x)) H(p,q)=p(x)log(q(x))

其中,p(x)表示真实结果的概率分布,q(x)表示预测结果的概率分布。

交叉熵的值越小,表示预测结果与真实结果越接近,模型的性能也越好。因此,通过最小化交叉熵,可以优化模型的预测能力。

在深度学习中,交叉熵通常作为损失函数与激活函数一起使用,用来训练神经网络模型。通过反向传播算法,可以根据交叉熵的值来调整模型的参数,使得模型的预测结果与真实结果更加接近。

📌机器学习的第 3 步:解一个最优化的问题。

找一个 wb,把未知的参数找一个数值出来,看代哪一个数值进去可以让损失 L 的值最小,就是要找的 wb,这个可以让损失最小的 wb 称为 w∗b∗ 代表它们是最好的一组 wb,可以让损失的值最小。

梯度下降(gradient descent)是经常会使用优化的方法。

试了不同的参数,计算它的损失,画出来的等高线图称为误差表面(error surface)。
在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组 w 跟 b 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好,拿这一组 w 跟 b,放到函数里面,预测会越精准。在这里插入图片描述

学习率(learning rate)η 也会影响步伐大小
学习率是自己设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。
这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。

🎯为什么损失可以是负的?

在这里插入图片描述

🎯梯度下降有一个很大的问题

梯度下降有一个很大的问题,没有找到真正最好的解,没有找到可以让损失最小的 w。
在图 1.4 所示的例子里面,把 w 设定在最右侧红点附近这个地方可以让损失最小。但如果在梯度下降中, w 0 w^0 w0 是随机初始的位置,也很有可能走到 wT 这里,训练就停住了,无法再移动 w 的位置。右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值(global minima),而 wT 这个地方称为局部最小值(local minima),其左右两边都比这个地方的损失还要高一点,但是它不是整个误差表面上面的最低点。

在这里插入图片描述
推广到多参数(w,b)的话

假设有两个参数,随机初始值为 w 0 w^0 w0, b 0 b^0 b0。要计算 w, b 跟损失的微分,计算在 w = w 0 w^0 w0 的位置,b = b 0 b^0 b0 的位置,要计算 w 对 L 的微分,计算 b 对 L 的微分计算完后更新 w 跟 b,把 w 0 w^0 w0 减掉学习率乘上微分的结果得到 ,把 b 0 b^0 b0 减掉学习率乘上微分的结果得到 b 1 b^1 b1

在这里插入图片描述

就是反复同样的步骤,就不断的更新 wb,期待最后,可以找到一个最好的 w,w∗ 跟最好的 b∗. 如图 1.5 所示,随便选一个初始的值,先计算一下 w 对 L 的微分,跟计算一下 b 对 L 的微分,接下来更新 wb,更新的方向就是 ∂L/∂w,乘以 η 再乘以一个负号,∂L/∂b,算出这个微分的值,就可以决定更新的方向,可以决定 w 要怎么更新。把 wb 更新的方向结合起来,就是一个向量,就是红色的箭头,再计算一次微分,再决定要走什么样的方向,把这个微分的值乘上学习率,再乘上负号,我们就知道红色的箭头要指向那里,就知道如何移动 wb 的位置,一直移动,期待最后可以找出一组不错的 w, b

🚩Task 2 :

🎯线性模型

书中举例了一个预测观看人数的例子

每隔 7 天它一个循环,如果一个模型参考前 7 天的数据,把 7天前的数据,直接复制到拿来当作预测的结果,也许预测的会更准也说不定,所以我们就要修改一下模型。通常一个模型的修改,往往来自于对这个问题的理解,即领域知识

机器学习领域的领域知识是指机器学习算法、技术和应用方面的专业知识。
包括机器学习算法、数据预处理、特征工程、模型评估和选择的知识。

这些模型都是把输入的特征 x 乘上一个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)

📌分段线性曲线

红色的曲线可以看作是一个常数再加上一群 Hard Sigmoid 函数。Hard Sigmoid 函数的特性是当输入的值,当 x 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。所以它是先水平的,再斜坡,再水平的。所以红色的线可以看作是一个常数项加一大堆的蓝色函数(Hard Sigmoid)。常数项设成红色的线跟 x 轴的交点一样大。

在这里插入图片描述

常数项怎么加上蓝色函数后,变成红色的这一条线?

  1. 蓝线 1 函数斜坡的起点,设在红色函数的起始的地方,第 2 个斜坡的终点(最高点)|(第 1 个蓝色函数斜坡的终点) 设在第一个转角处,让第 1 个蓝色函数的斜坡和红色函数的斜坡的斜率是一样的,这个时候把 线0+线1 就可以得到红色曲线左侧的线段。
  2. 再加第 2 个蓝色的函数,所以第2 个蓝色函数的斜坡就在红色函数的第一个转折点到第 2 个转折点之间,让第 2 个蓝色函数的斜率跟红色函数的斜率一样,这个时候把 线0+线1+线2,就可以得到红色函数左侧和中间的线段。
  3. 接下来第 3 个部分,第 2 个转折点之后的部分,就加第 3 个蓝色的函数,第 3 个蓝色的函数坡度的起始点设的跟红色函数转折点一样,蓝色函数的斜率设的跟红色函数斜率一样
  4. 接下来把 线0+线1+线2+线3全部加起来,就得到完整红色的线。
    (线0、线1、线2、线3 为图1.8中线段)

在这里插入图片描述

所以红色线,即分段线性曲线(piecewise linear curve)可以看作是一个常数,再加上一堆蓝色的函数。

大量不同的蓝色函数,加上一个常数以后就可以组出任意的分段线性曲线。
如果分段线性曲线越复杂,转折的点越多,所需的蓝色函数就越多。
反之,越多蓝色函数的话可以组成越复杂的分段线性曲线。

可以在这样的曲线(图1.9)上面,先取一些点并连起来变成一个分段线性曲线。这个分段线性曲线跟非常接近原来的曲线,如果点取的够多或点取的位置适当,分段线性曲线就可以逼近这一个连续的曲线。

在这里插入图片描述

所以可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数组合起来。也就是说,只要有足够的蓝色函数把它加起来,就可以变成任何连续的曲线。

我们可以用任意多的蓝色函数来模拟出曲线。
极限的思路来看:就是只有取得足够多的点并且相连接,就可以无限多的直线代替曲线。

📌如何表示方程

在这里插入图片描述

如果 x1 的值,趋近于无穷大的时候,e−(b+wx1) 这一项就会消失,当 x1 非常大的时候,这一条就会收敛在高度为 c 的地方。如果 x1 负的非常大的时候,分母的地方就会非常大,y的值就会趋近于 0。
所以可以用这样子的一个函数逼近这一个蓝色的函数,即 Sigmoid 函数,Sigmoid 函数就是 S 型的函数。
因为它长得是有点像是 S 型,所以叫它 Sigmoid 函数。为了简洁,去掉了指数的部分,蓝色函数的表达式为

y = c σ ( b + w x 1 ) ( 1.15 ) y = cσ(b + wx1) (1.15) y=cσ(b+wx1)(1.15)

所以可以用 Sigmoid 函数逼近 Hard Sigmoid 函数。

y = c 1 + e − ( b + w x 1 ) y = \frac{c}{ 1+ e^{-(b+wx1)}} y=1+e(b+wx1)c

调整这里的 bw c 可以制造各种不同形状的 Sigmoid 函数, 用各种不同形状的 Sigmoid函数去逼近 Hard Sigmoid 函数。

如图 1.11 所示,如果改 w,就会改变斜率,就会改变斜坡的坡度。如果改了 b,就可以把这一个 Sigmoid 函数左右移动;如果改 c,就可以改变它的高度。所以只要有不同的 w 不同的 b 不同的 c,就可以制造出不同的 Sigmoid 函数,把不同的Sigmoid 函数叠起来以后就可以去逼近各种不同的分段线性函数;分段线性函数可以拿来近似各种不同的连续的函数。

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

我们可以不只用一个特征 x1,可以用多个特征代入不同的 c, b, w,组合出各种不同的函数,从而得到更有 灵活性(flexibility) 的函数,如图 1.13 所示。
j 来代表特征的编号。如果要考虑前 28 天,j 就是 1 到 28。

在这里插入图片描述

无论是拿行或拿列都可以,把 W 的每一列或每一行“拼”成一个长的向量,把 b, cT, b” 拼” 上来,这个长的向量直接用 θ 来表示。
所有的未知的参数,一律统称 θ。

💡优化是找一个可以让损失最小的参数,是否可以穷举所有可能的未知参数的值?

在这里插入图片描述

💡刚才的例子里面有 3 个 Sigmoid,为什么是 3 个,能不能 4 个或更多?

在这里插入图片描述

📌定义损失

之前是 L(w, b),因为 w 跟 b 是未知的。
现在未知的参数很多了,再把它一个一个列出来太累了,所以直接用 θ 来统设所有的参数,所以损失函数就变成 L(θ)

损失函数能够判断 θ 的好坏,其计算方法跟刚才只有两个参数的时候是一样的。
先给定 θ 的值,即某一组 W, b, cT, b 的值,再把一种特征 x 代进去,得到估测出来的 y,再计算一下跟真实的标签之间的误差 e。把所有的误差通通加起来,就得到损失。

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

要找到 θ θ θ让损失越小越好,可以让
损失最小的一组 θ θ θ称为 θ ∗ θ_∗ θ。一开始要随机选一个初始的数值 θ 0 θ_0 θ0
接下来计算每一个未知的参数对 L 的微分,得到向量 g g g,即可以让损失变低的函数

在这里插入图片描述

假设有 1000 个参数,这个向量的长度就是 1000,这个向量也称为梯度, ∇ L ∇L L代表梯度。
L( θ 0 θ_0 θ0) 是指计算梯度的位置,是在 θ 等于 θ 0 θ_0 θ0 的地方。
计算出 g 后,接下来跟新参数, θ 0 θ_0 θ0 代表它是一个起始的值,它是一个随机选的起始的值,代表 θ 1 θ_1 θ1 更新过一次的结果, θ 2 0 θ^0_2 θ20 减掉微分乘以,减掉 η 乘上微分的值,得到 θ 2 1 θ^1_2 θ21,以此类推,就可以把 1000 个参数都更新了。

在这里插入图片描述

假设参数有 1000 个, θ 0 θ_0 θ0 就是 1000 个数值,1000 维的向量,g 是 1000 维的向量, θ 1 θ_1 θ1 也是 1000 维的向量。 整个操作就是这样,由 θ 0 θ_0 θ0 算梯度,根据梯度去把 θ 0 θ_0 θ0 更新成 θ 1 θ_1 θ1,再算一次梯度,再根据梯度把 θ 1 θ_1 θ1 再更新成 θ 2 θ_2 θ2,再算一次梯度把 θ 2 θ_2 θ2 更新成 θ 3 θ_3 θ3,以此类推,直到不想做。
在这里插入图片描述

或者计算出梯度为 0 向量,导致无法再更新参数为止,不过在实现上几乎不太可能梯度为 0,通常会停下来就是我们不想做了。

📌实现上的细节

💡批量(batch)

在这里插入图片描述

实现上有个细节的问题,实际使用梯度下降的时候,如图 1.17 所示,会把 N 笔数据随机分成一个一个的批量(batch),一组一组的。

在深度学习中,批量(Batch) 指的是计算一次成本(cost) 需要的输入数据个数。当数据集比较大时,一次性处理所有样本在计算和存储上会有困难,因此会采用一次输入一定量的样本来进行训练。

如果数据集比较小,可以将全体数据看做一个批量,即把数据集中每个样本都计算损失(loss)然后取其平均值当做成本(cost)。

批量学习的优点:能更好地代表样本总体从而更准确地确定下降方向,对梯度向量有更精确的估计等。

💡回合(epoch)

把所有的批量都看过一次,称为一个回合(epoch),每一次更新参数叫做一次更新。更新跟回合是不同的东西。每次更新一次参数叫做一次更新,把所有的批量都看过一遍,叫做一个回合。

回合(Epoch) 指的是遍历全部数据集一次。
在一个回合中,模型会对数据集中的所有样本都进行处理和学习。

🎯模型变形

待续

这篇关于读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113499

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

读书摘录《控糖革命》

又到了每周推荐时间,这周末给大家推荐一本书《控糖革命》。身体是革命的本钱,只有保持健康的身体,才能保证持久的生产力,希望我的读者都可以身体健康,青春永驻。 推荐前,首先申明在《控糖革命》一书中,作者提出了一些颇具争议的观点,这些观点并没有经过系统的科学论证,但这并不妨碍我们从中获取一些有益的控糖建议。作者通过分享作者的个人经验和研究,为我们提供了一种全新的饮食理念,帮助我们更好地控制血糖峰值

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]