吴恩达深度学习 (week7,8)

一、调试处理的简介

在深度学习中,常见的超参数种类繁多, 对于模型的训练过程和最终性能有着显著影响。以下是一些常见的超参数及其作用:

  1. 学习率(Learning Rate)

    • 定义了模型在训练过程中权重更新的步长。学习率过大可能导致模型在最优解附近震荡而无法收敛,学习率过小则可能导致训练过程过于缓慢。
  2. 批次大小(Batch Size)

    • 决定了每次更新模型权重时所使用的样本数量。较大的批次大小可以加速训练过程,但也可能导致内存不足;较小的批次大小则可能使训练过程更加稳定,但训练速度较慢。
  3. 迭代次数(Iterations 或 Epochs)

    • 表示整个训练集被用于训练的次数。足够的迭代次数可以确保模型充分学习数据中的特征,但过多的迭代可能导致过拟合。
  4. 权重初始化方法

    • 决定了网络权重在开始训练时的初始值。不同的初始化方法可能会影响模型的收敛速度和最终性能。
  5. 优化器(Optimizer)

    • 用于更新模型权重的算法。常见的优化器包括SGD(随机梯度下降)、Adam、RMSprop等。不同的优化器有不同的特点和适用场景。
  6. 正则化参数

    • 包括权重衰减(Weight Decay)、丢弃率(Dropout Rate)等,用于防止模型过拟合。权重衰减通过在损失函数中添加权重的L2范数来惩罚大的权重,而丢弃率则是在训练过程中随机丢弃一部分神经元。
  7. 网络结构参数

    • 如隐藏层数目、隐藏层单元数目、卷积核大小等,这些参数定义了网络的结构和复杂度。
  8. 激活函数(Activation Function)

    • 决定了神经元如何对输入进行非线性变换。常见的激活函数包括ReLU、Sigmoid、Tanh等。
  9. 损失函数(Loss Function)

    • 用于衡量模型预测值与真实值之间的差异。不同的任务可能需要不同的损失函数,如均方误差损失用于回归任务,交叉熵损失用于分类任务。

为超参数选择合适的范围

  • 假设在搜索超参数 α (学习速率),怀疑其值最小是0.0001或最大是1。如果画一条从0.0001到1的数轴,沿其随机均匀取值,那90%的数值将会落在0.1到1之间,结果就是,在0.1到1之间,应用了90%的资源,而在0.0001到0.1之间,只有10%的搜索资源,这看上去不太对。

  • 反而,用对数标尺搜索超参数的方式会更合理,因此这里不使用线性轴,分别依次取0.0001,0.001,0.01,0.1,1,在对数轴上均匀随机取点,这样,在0.0001到0.001之间,就会有更多的搜索资源可用,还有在0.001到0.01之间等等。
    在这里插入图片描述

二、超参数训练简介

  • 一个模型,通常是有庞大的数据组,但没有许多计算资源或足够的CPU和GPU的前提下,基本而言,只可以一次负担起试验一个模型或一小批模型,在这种情况下,即使当它在试验时,也可以逐渐改良。① 比如,第0天,将随机参数初始化,然后开始试验,然后逐渐观察自己的学习曲线,也许是损失函数 J,或者数据设置误差或其它的东西,② 在第1天内逐渐减少,那这一天末的时候,学习得真不错。试着增加一点学习速率,看看它会怎样,也许结果证明它做得更好,那是你第二天的表现。③ 两天后,依旧做得不错,也许我现在可以填充下Momentum或减少变量。④ 然后进入第三天,每天都会观察它,不断调整参数。 ⑤ 也许有一天,会发现你的学习率太大了,所以可能又回归之前的模型,像这样,但你可以说是在每天花时间照看此模型,即使是它在许多天或许多星期的试验过程中。所以这是一个人们照料一个模型的方法,观察它的表现,耐心地调试学习率,但那通常是因为你没有足够的计算能力,不能在同一时间试验大量模型时才采取的办法。
  • 另一种方法则是同时试验多种模型,设置一些超参数,尽管让它自己运行,或者是一天甚至多天,然后会获得像这样的学习曲线,这可以是损失函数J或实验误差或损失或数据误差的损失,但都是曲线轨迹的度量。同时可以开始一个有着不同超参数设定的不同模型,所以,第二个模型会生成一个不同的学习曲线,也许是像这样的一条(紫色曲线),会说这条看起来更好些。与此同时,可以试验第三种模型,其可能产生一条像这样的学习曲线(红色曲线),还有另一条(绿色曲线),也许这条有所偏离,像这样,等等。或者可以同时平行试验许多不同的模型,橙色的线就是不同的模型。用这种方式可以试验许多不同的参数设定,然后只是最后快速选择工作效果最好的那个。在这个例子中,也许这条看起来是最好的(下方绿色曲线)。

在这里插入图片描述

三、归一化网络激活函数

  • 在深度学习兴起后,最重要的一个思想是Batch归一化,由Sergey loffe和Christian Szegedy两位研究者创造。Batch归一化会使参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会使训练更加容易,甚至是深层网络。

  • 正则化:Regularization,归一化:Normalization

  • logistic回归时,归一化输入特征可以加快学习过程。计算平均值,从训练集中减去平均值,计算了方差,接着根据方差归一化数据集,这是如何把学习问题的轮廓,从很长的东西,变成更圆的东西,更易于算法优化。所以这是有效的,对logistic回归和神经网络的归一化输入特征值而言。

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

在这里插入图片描述

  • 比如,如果有sigmoid激活函数,不想让你的值总是全部集中在这里,你想使它们有更大的方差,或不是0的平均值,以便更好的利用非线性的sigmoid函数,而不是使所有的值都集中于这个线性版本中,这就是为什么有了 γ 和 β 两个参数后,你可以确保所有的Z(i) 值可以是你想赋予的任意值,或者它的作用是保证隐藏的单元已使均值和方差标准化。那里,均值和方差由两参数控制,即 γ 和 β ,学习算法可以设置为任何值,所以它真正的作用是,使隐藏单元值的均值和方差标准化,即Z(i) 有固定的均值和方差,均值和方差可以是0和1,也可以是其它值,它是由 γ 和 β 两参数控制的。

Batch归一化的作用: 适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。你应用Batch归一化了一些隐藏单元值中的平均值和方差,不过训练输入和这些隐藏单元值的一个区别是,你也许不想隐藏单元值必须是平均值0和方差1。

四、Batch 拟合进神经网络

在这里插入图片描述

  • 计算每层的z之后,通过归一化算出一个新的z,用这个z去计算下面的值
  • 给样本每个数都加相同的数b均值也会加b
  • 当我们训练深度神经网络时,输入数据经过多个层传递,每一层的输出都是前一层的输入。然而,由于不同层之间的参数会变化,每层的输入分布也会变化。这种输入分布的变化可能会导致训练过程变得困难

Batch Norm 为什么生效 ?

  • 如何归一化输入特征值 x ,使其均值为0,方差1, 又是怎样加速学习的,有一些从0到1而不是从1到1000的特征值,通过归一化所有的输入特征值 x ,以获得类似范围的值,可以加速学习。所以Batch归一化起的作用的原因,直观的一点就是,它在做类似的工作,但不仅仅对于这里的输入值,还有隐藏单元的值,这只是Batch归一化作用的冰山一角

Batch归一化(Batch Normalization)在神经网络中起到了以下重要作用:

  1. 规范化数据:Batch归一化对每一批数据进行归一化处理,使其均值接近0,方差接近1。这有助于解决内部协变量偏移(Internal Covariate Shift)问题,即网络训练过程中,由于每层的参数更新,导致后续层的输入分布发生变化。
  2. 加速训练:通过规范化数据,Batch归一化使得网络更容易训练。网络不再需要不断适应输入数据分布的变化,这通常会导致更快的收敛速度和更少的训练时间。
  3. 允许使用更高的学习率:由于Batch归一化减少了内部协变量偏移,网络可以更加稳定地训练,因此可以使用更高的学习率,进一步加速训练过程。
  4. 提高模型稳定性:Batch归一化有助于解决梯度消失或爆炸的问题,使模型在训练过程中更加稳定。

综上所述,Batch归一化通过改善数据分布加速训练、允许使用更高的学习率以及提高模型稳定性,显著提高了神经网络的训练效果和性能。

Covariate Shift是机器学习和深度学习中的一个常见问题,它指的是训练集的数据分布和预测集(或测试集)的数据分布不一致的现象。在模型训练过程中,如果训练集和测试集的数据分布存在显著差异,那么模型在训练集上表现良好,但在测试集上可能表现不佳。这会导致模型在真实场景中泛化能力降低。

  • dropout相似,它往每个隐藏层的激活值上增加了噪音,dropout有增加噪音的方式,它使一个隐藏的单元,以一定的概率乘以0,以一定的概率乘以1,所以你的dropout含几重噪音,因为它乘以0或1。

  • 对比而言,Batch归一化含几重噪音,因为标准偏差的缩放和减去均值带来的额外噪音。这里的均值和标准差的估计值也是有噪音的,所以类似于dropout,Batch归一化有轻微的正则化效果,因为给隐藏单元添加了噪音,这迫使后部单元不过分依赖任何一个隐藏单元,类似于dropout,它给隐藏层增加了噪音,因此有轻微的正则化效果。因为添加的噪音很微小,所以并不是巨大的正则化效果,你可以将Batch归一化和dropout一起使用,如果你想得到dropout更强大的正则化效果。

  • 也许另一个轻微非直观的效果是,如果你应用了较大的mini-batch,对,比如用了512而不是64,通过应用较大的min-batch,减少了噪音,因此减少了正则化效果,这是dropout的一个奇怪的性质,就是应用较大的mini-batch可以减少正则化效果。

测试Batch Norm

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

五、Softmax回归基本概念

  • Softmax回归,也称为逻辑回归(Logistic Regression)或多元分类逻辑回归(Multinomial Logistic Regression),是一种分类模型,它将每个类别的预测概率表示为一个概率分布。与逻辑回归不同,Softmax回归可以处理多分类问题,并且它的输出可以被解释为每个类别的概率。给定一个输入向量x,Softmax回归的任务是计算每个类别的概率,并选择具有最高概率的类别作为预测结果。

  • 有一种logistic回归的一般形式,叫做Softmax回归,能让你在试图识别某一分类时做出预测,或者说是多种分类中的一个,不只是识别两个分类
    在这里插入图片描述

训练 Softmax分类器

在这里插入图片描述
简单来说就是用临时变量 t 将它归一化,使总和为1,于是这就变成了a[L]
,你注意到向量 z中,最大的元素是5,而最大的概率也就是第一种概率。

  • hardmax函数会观察 z的元素,然后在 z 中最大元素的位置放上1,其它位置放上0,所这是一个hard max,也就是最大的元素的输出为1,其它的输出都为0

  • 就是Softmax回归或Softmax激活函数将logistic激活函数推广到 C 类,而不仅仅是两类,结果就是如果 C=2 ,那么C=2 的Softmax实际上变回了logistic回归,我不会在这个视频中给出证明,但是大致的证明思路是这样的,如果 C=2 ,并且你应用了Softmax,那么输出层a[L] 将会输出两个数字,如果 C=2 的话,也许输出0.842和0.158,对吧?这两个数字加起来要等于1,因为它们的和必须为1,其实它们是冗余的,也许你不需要计算两个,而只需要计算其中一个,结果就是你最终计算那个数字的方式又回到了logistic回归计算单个输出的方式。这算不上是一个证明,但我们可以从中得出结论,Softmax回归将logistic回归推广到了两种分类以上。

在Softmax分类中,一般使用的损失函数是交叉熵损失函数(Cross-Entropy Loss Function)。交叉熵损失函数用于衡量模型的预测概率分布与真实概率分布之间的差异。

假设我们有 N N N个样本,每个样本有 K K K个可能的类别。对于第 i i i个样本,其真实标签向量为 y i ∈ { 0 , 1 } K \mathbf{y}_i \in \{0, 1\}^{K} yi{0,1}K(one-hot编码),模型预测的概率分布向量为 y ^ i ∈ [ 0 , 1 ] K \hat{\mathbf{y}}_i \in [0, 1]^{K} y^i[0,1]K,其中每个元素表示样本属于对应类别的概率。

交叉熵损失函数的公式可以表示为:

Loss = − 1 N ∑ i = 1 N ∑ j = 1 K y i , j log ⁡ ( y ^ i , j ) \text{Loss} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{K} y_{i,j} \log(\hat{y}_{i,j}) Loss=N1i=1Nj=1Kyi,jlog(y^i,j)

其中, y i , j y_{i,j} yi,j是真实标签向量 y i \mathbf{y}_i yi中第 j j j个元素的值(0或1), y ^ i , j \hat{y}_{i,j} y^i,j是预测概率向量 y ^ i \hat{\mathbf{y}}_i y^i中第 j j j个元素的值(即模型预测样本 i i i属于类别 j j j的概率)。

  • 这个公式可以理解为:对于每个样本 i i i,我们计算其真实标签与预测概率之间的交叉熵损失,并对所有样本的损失进行平均,得到最终的损失值。交叉熵损失函数通过计算真实标签与预测概率之间的负对数似然来度量模型的性能。当预测概率与真实标签越接近时,交叉熵损失越小;反之,损失越大。

  • 在训练过程中,我们通常会使用梯度下降等优化算法来最小化这个损失函数,从而优化模型的参数,提高分类性能。

  • 值得注意的是,交叉熵损失函数与softmax函数通常是结合使用的。softmax函数将模型的原始输出转换为概率分布,而交叉熵损失函数则用于衡量这个概率分布与真实标签之间的差异。这种结合使得Softmax分类在处理多分类问题时具有优秀的性能。

六、TensorFlow基本概念

import numpy as np
import tensorflow as tf
#导入TensorFlow
​
w = tf.Variable(0,dtype = tf.float32)
#接下来,让我们定义参数w,在TensorFlow中,使用tf.Variable()来定义参数#然后定义损失函数:
​
cost = tf.add(tf.add(w**2,tf.multiply(- 10.,w)),25)

#然后我们定义损失函数J
然后我们再写:
​
train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
#(让我们用0.01的学习率,目标是最小化损失)。#最后下面的几行是惯用表达式:
​
init = tf.global_variables_initializer()
​
session = tf.Session()#这样就开启了一个TensorFlow session。
​
session.run(init)#来初始化全局变量。#然后让TensorFlow评估一个变量,我们要用到:
​
session.run(w)#上面的这一行将w初始化为0,并定义损失函数,我们定义train为学习算法,它用梯度下降法优化器使损失函数最小化,但实际上我们还没有运行学习算法,所以#上面的这一行将w初始化为0,并定义损失函数,我们定义train为学习算法,它用梯度下降法优化器使损失函数最小化,但实际上我们还没有运行学习算法,所以session.run(w)评估了w print(session.run(w))

  • tf.add用两次的原因是:里面的tf.add是损失函数中的单项式相加;外面的tf.add是损失函数求和的操作

session.run(w)

上面的这一行将w初始化为0,并定义损失函数,定义train为学习算法,它用梯度下降法优化器使损失函数最小化,但实际上我们还没有运行学习算法,所以上面的这一行将w初始化为0,并定义损失函数,我们定义train为学习算法,它用梯度下降法优化器使损失函数最小化,但实际上我们还没有运行学习算法,所以session.run(w)评估了w

  • 定义 x ,把它想做扮演训练数据的角色,事实上训练数据有 x 和 y ,但这个例子中只有x ,把 x 定义为:x = tf.placeholder(tf.float32,[3,1]),让它成为 [3,1] 数组,我要做的就是,因为cost 这个二次方程的三项前有固定的系数,它是 w 2− 10w + 25,我们可以把这些数字1,-10和25变成数据,我要做的就是把 cost 替换成:cost = x[0][0]*w**2 +x[1][0]*w + x[2][0],现在 x 变成了控制这个二次函数系数的数据,这个placeholder函数告诉TensorFlow,你稍后会为x 提供数值。

让我们再定义一个数组,coefficient = np.array([[1.],[-10.],[25.]]),这就是我们要接入 x 的数据。最后我们需要用某种方式把这个系数数组接入变量 x ,做到这一点的句法是,在训练这一步中,要提供给 x 的数值,我在这里设置 feed_dict = {x:coefficients} 好了,希望没有语法错误,我们重新运行它,希望得到和之前一样的结果。

feed_dict 是 TensorFlow 1.x 版本中用于向 TensorFlow 计算图中传递数据的一种方式。在 TensorFlow 1.x 的计算图中,节点(通常是操作)之间的依赖关系被静态地定义,而 feed_dict 允许你在运行时动态地为某些操作提供具体的输入数据。

当你在 TensorFlow 1.x 中定义一个计算图时,你通常会创建占位符(tf.placeholder)来代表输入数据。这些占位符在图中是“空洞”,它们不存储实际的数据,而是等待在运行时通过 feed_dict 来填充。

例如:

import tensorflow as tf

# 创建一个占位符,用于存储输入数据
x = tf.placeholder(tf.float32, shape=[None, 1])

# 定义一个简单的操作,比如乘以 2
y = tf.multiply(x, 2)

# 创建一个会话
with tf.Session() as sess:
    # 使用 feed_dict 来为占位符 x 提供数据
    feed_dict = {x: [[1.0], [2.0], [3.0]]}
    result = sess.run(y, feed_dict=feed_dict)
    print(result)  # 输出: [[2.], [4.], [6.]]

在这个例子中,我们创建了一个名为 x 的占位符,并使用 feed_dict 在运行时为它提供了实际的数据。然后,我们执行了计算图以获取结果 y

需要注意的是,从 TensorFlow 2.x 开始,Eager Execution 被启用为默认模式,这使得 TensorFlow 的操作能够立即返回具体的值,而不需要显式地创建会话和使用 feed_dict。在 TensorFlow 2.x 中,你可以直接使用 Python 的值作为操作的输入,而不需要占位符和 feed_dict。然而,TensorFlow 2.x 仍然支持计算图模式,并提供了更高级的方法(如 tf.function 装饰器)来创建和运行计算图。

在这里插入图片描述

七、上述学习总结

1、第一题 超参数搜索最值

  • 如果在大量的超参数中搜索最佳的参数值,那么应该尝试在网格中搜索而不是使用随机值,以便更系统的搜索,而不是依靠运气,请问这句话是正确的吗?

A、错误
B、正确
解:A

应当尝试随机值,不要使用网格搜索,因为你不知道哪些超参数比其他的更重要。

And to take an extreme example, let’s say that hyperparameter two was that value epsilon that you have in the denominator of the Adam algorithm. So your choice of alpha matters a lot and your choice of epsilon hardly matters.
举一个很极端的例子,就比如在Adam算法中防止除零操作的ε的

2、第二题 超参数搜索策略

  • 在超参数搜索过程中,你尝试只照顾一个模型(使用熊猫策略)还是一起训练大量的模型(鱼子酱策略)在很大程度上取决于:

A.是否使用批量(batch)或小批量优化(mini-batch optimization)

B.神经网络中局部最小值(鞍点)的存在性

C.在你能力范围内,你能够拥有多大的计算能力(博主注:就是高性能电脑和低性能电脑的区别)

D.需要调整的超参数的数量

解:C

A:这两种与数据规模有关,数据规模大选择小批量优化,数据规模小选用批量优化

B:鞍点的存在性与数据本身的性质有关

D:需要调整的超参数数量与我们选择的优化算法有关

3、第三题 动量超参数取样

  • 如果您认为 β (动量超参数)介于0.9和0.99之间,那么推荐采用以下哪一种方法来对 β 值进行取样?

A.

r = np.random.rand()
beta = r * 0.09 + 0.9

B.

r = np.random.rand()
beta = 1 - 10 ** ( - r - 1 )

C.

r = np.random.rand()
beta = 1 - 10 ** ( - r + 1 )

D.

r = np.random.rand()
beta = r * 0.9 + 0.09 

解:B

注:β=1−10{-r−1},因为r的取值只能在0到1之间,所以当r等于0时,β=1−10{−1}=1−0.1=0.9,当r等于1时,β=1−10^{−2}=1−0.01=0.99。

4、第四题 批量标准化介绍

  • 在视频中介绍的批量标准化中,如果将其应用于神经网络的第 l ll 层,您应该对谁进行标准化?

在这里插入图片描述
解:A
将隐藏层的经过激活函数前的z[l]进行归一化

5、第五题 标准化公式介绍

在这里插入图片描述
解:B

解:为了避免除零操作

加上ϵ 是为了保证数值的稳定,避免分子过于接近0,导致数值过大。

6、第六题 标准化公式 γ,β

在这里插入图片描述
解:CE

7、第七题 评估标准化网络

在这里插入图片描述
解:D

解:执行所需的标准化,在训练期间使用使用了μ和σ2的指数加权平均值来估计mini-batches的情况。

训练过程中,我们是在每个Mini-batch使用Batch Norm,来计算所需要的均值 μ 和方差。σ2但是在测试的时候,我们需要对每一个测试样本进行预测,无法计算均值和方差。

此时,我们需要单独进行估算均值 μ 和方差 σ2。通常的方法就是在我们训练的过程中,对于训练集的Mini-batch,使用指数加权平均,当训练结束的时候,得到指数加权平均后的均值 μ 和方差 σ2 ,而这些值直接用于Batch Norm公式的计算,用以对测试样本进行预测。

八、机器学习正交化

在这里插入图片描述

  • 正交化主要用于减少特征之间的相关性,从而提高模型的性能和稳定性。在机器学习的上下文中,正交化通常指的是一种数据预处理技术,通过线性变换将特征向量转化为正交或近似正交的向量。

具体来说,正交化在机器学习中的主要应用包括:

  1. 特征处理:在模型训练之前,通过正交化技术处理特征,可以降低特征之间的相关性,使得每个特征对于模型的贡献更加独立。这有助于避免模型过拟合,并提高模型的泛化能力。
  2. 降维和降噪:正交化技术如主成分分析(PCA)可以帮助我们从原始特征集中找到更小的、线性不相关的子集,从而减少数据的特征总数。这有助于简化模型,降低计算复杂度,并提高模型的性能。
  3. 模型优化:在调整模型参数时,正交化确保每一组参数的影响尽量独立。这意味着调节一个参数不会对另一个参数造成影响,类似于控制变量法。这种独立性使得我们可以更有效地评估和调整模型的性能。

正交化的应用场景非常广泛,包括但不限于小型机器学习模型构建、模式识别、数据可视化、文本处理以及信号处理等。在这些场景中,正交化技术都发挥了重要的作用,帮助人们更有效地处理和利用数据,提高机器学习模型的性能和准确性。

九、单一数字评估指标

在这里插入图片描述

  • 搭建了某个分类器 A ,通过改变超参数,还有改变训练集等手段,现在训练出来了一个新的分类器B,所以评估你的分类器的一个合理方式是观察它的查准率(precision)和查全率(recall)。
  • 查准率和查全率的确切细节对于这个例子来说不太重要。但简而言之,查准率的定义是在你的分类器标记为猫的例子中,有多少真的是猫。所以如果分类器 A 有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。

查全率就是,对于所有真猫的图片,你的分类器正确识别出了多少百分比。实际为猫的图片中,有多少被系统识别出来?如果分类器 A 查全率是90%,这意味着对于所有的图像,比如说你的开发集都是真的猫图,分类器 A 准确地分辨出了其中的90%。

查全率(Recall)和召回率实际上是同一个指标的两种不同叫法,它们都是用来评估分类模型或信息检索系统性能的重要指标。查全率(召回率)反映了系统找出的相关实例占全部相关实例的比例,即“找的全不全”。具体来说,查全率(召回率)的计算公式如下:

查全率 = ( 真正例( T r u e P o s i t i v e , T P ) 真正例( T r u e P o s i t i v e , T P ) + 假反例( F a l s e N e g a t i v e , F N ) 查全率 = (\frac{真正例(True Positive,TP)}{真正例(True Positive,TP)+假反例(False Negative,FN)} 查全率=(真正例(TruePositiveTP+假反例(FalseNegativeFN)真正例(TruePositiveTP

其中:

  • 真正例(True Positive,TP):模型正确预测为正样本的实例数量。
  • 假反例(False Negative,FN):模型错误预测为负样本,但实际上是正样本的实例数量。

查全率越高,意味着模型找出的相关实例越多,即“漏报”的情况越少。在许多应用中,尤其是那些对漏报非常敏感的应用(如疾病检测、安全监控等),查全率是一个非常重要的评估指标。

需要注意的是,查全率(召回率)通常与精确率(Precision)一起使用,以更全面地评估模型的性能。精确率反映了系统找出的相关实例中有多少是真正相关的,即“找的准不准”。这两个指标在不同的应用场景下可能有不同的优先级。例如,在垃圾邮件检测中,我们可能更关心精确率,以避免误将正常邮件标记为垃圾邮件;而在疾病筛查中,我们可能更关心查全率,以确保尽可能多地找出患者。

F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)

十、开发集测试集使用

  • 开发(dev)集也叫做开发集(development set),有时称为保留交叉验证集(hold out cross validation set)

  • 开发集和测试集都来自同一分布,这分布就是你的所有数据混在一起

开发集,测试集数据划分

  • 在机器学习中,把取得的全部数据用70/30比例分成训练集和测试集。或者如果必须设立训练集、开发集和测试集,你会这么分60%训练集,20%开发集,20%测试集。在机器学习的早期,这样分是相当合理的,特别是以前的数据集大小要小得多。所以如果你总共有100个样本,这样70/30或者60/20/20分的经验法则是相当合理的。如果你有几千个样本或者有一万个样本,这些做法也还是合理的。

  • 但在现代机器学习中,我们更习惯操作规模大得多的数据集,比如说你有1百万个训练样本,这样分可能更合理,98%作为训练集,1%开发集,1%测试集,我们用 D 和 T 缩写来表示开发集和测试集。因为如果你有1百万个样本,那么1%就是10,000个样本,这对于开发集和测试集来说可能已经够了。所以在现代深度学习时代,有时我们拥有大得多的数据集,所以使用小于20%的比例或者小于30%比例的数据作为开发集和测试集也是合理的

开发集,测试集的大小

在深度学习中,分类错误率是一个重要的评估指标,它表示在所有测试样例中错误分类的样例比例。
通常情况下,错误率可以通过以下步骤进行计算:

  1. 首先,对于每一个测试样例,将其输入到已经训练好的深度学习模型中。
  2. 然后,模型会输出一个预测结果。
  3. 将这个预测结果与真实标签进行比较,如果两者不一致,则认为该样例被错误分类。
  4. 最后,统计所有被错误分类的样例数量,并除以总的测试样例数量,得到错误率。

其中M个被错误分类,那么错误率E可以表示为:

E = M N E = \frac{M}{N} E=NM

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

  • E 表示错误率,M 表示被错误分类的样例数量, N表示总的测试样例数量。请注意,这只是一个一般的错误率计算公式,对于深度学习中的特定分类任务,可能需要根据实际情况进行适当的修改和调整。

  • 此外,除了错误率之外,深度学习分类任务中还有许多其他的评估指标,如正确率、召回率、F1分数等,它们都可以用来更全面地评估模型的性能。

在这里插入图片描述
贝叶斯最优错误率在这里插入图片描述

  • 贝叶斯最优错误率(Bayes optimal error)是应用贝叶斯分类规则的分类器的最低可能错误率。换句话说,它代表了机器学习算法所能达到的理论上的最低错误率,且无法通过进一步优化来降低。在分类问题中,贝叶斯错误率是一个分类器对某个类别所能达到的最低的分类错误率。

这个最优错误率通常是根据人类的最佳表现来估计的。例如,如果一个顶级医学团队对某一个病进行探查,其错误率为0.5%,那么我们可以假定贝叶斯最优错误率≤0.5%。

在实际应用中,贝叶斯最优错误率可以作为一个性能上限,用于评估机器学习模型的性能。如果模型的表现接近这个上限,那么可以认为该模型在特定任务上的性能已经达到了理论上的最优水平。

需要注意的是,贝叶斯最优错误率是一个理论上的概念,实际中很难达到。此外,由于数据的复杂性、模型的局限性以及实际应用场景的多样性,机器学习模型通常无法达到这个理论上的最优水平。然而,通过不断优化模型结构和参数,以及采用更先进的算法和技术,我们可以尽可能地降低错误率,提高模型的性能。

十一、可避免误差介绍

在机器学习中,偏差(Bias)是指模型对真实关系的错误或过分简化的假设。它表示预测值的期望与真实值之间的差异,当模型对数据集的训练误差和测试误差都很高时,通常表示模型存在偏差问题。偏差问题一般发生在模型过于简单或无法捕捉到数据中的复杂关系时。例如,在线性回归模型中使用一个低阶多项式来拟合具有高阶特征的数据,模型就会出现偏差问题。

  • 比如人类具有近乎完美的准确度,所以人类水平的错误是1%。在这种情况下,如果您的学习算法达到8%的训练错误率和10%的开发错误率,那么你也许想在训练集上得到更好的结果。所以事实上,你的算法在训练集上的表现和人类水平的表现有很大差距的话,说明你的算法对训练集的拟合并不好。所以从减少偏差和方差的工具这个角度看,在这种情况下,我会把重点放在减少偏差上。你需要做的是,比如说训练更大的神经网络,或者跑久一点梯度下降,就试试能不能在训练集上做得更好。

正交化正则化的区别

  • 正交化主要用于数据降维降噪。它通过保留线性不相关的结果从特征向量集中寻找更小的子集来减少数据特征的总数量。线性不相关意味着两个或多个变量间没有线性关系,也就是说,它们的变化是相互独立的,一个变量的增减不会影响另一个变量。这种独立性有助于我们更有效地处理和利用数据,提高机器学习模型的性能和稳定性。正交化的应用场景包括小型机器学习模型构建、模式识别、数据可视化、文本处理以及信号处理等。

  • 正则化则是深度学习神经网络模型在训练过程中常用的一种手段。其主要目的是防止模型过拟合,即避免模型在训练数据上表现过于优秀,而在面对新数据时性能大幅下降的情况。通过给网络的损失函数加以限制,正则化可以防止模型在训练过程中“失控”,并降低模型的复杂度,使其对数据的依赖程度降低,从而提高模型对于不同类型数据的泛化能力。正则化本质上是一种防止深度神经网络出现过拟合现象的技术,可以用于提高深度学习模型在面对新数据时的准确性和预测有效性。

总结:
正交化主要用于数据预处理和特征选择,以提高模型的性能和稳定性;
正则化主要用于防止模型过拟合,提高模型的泛化能力。两者都是深度学习中不可或缺的技术手段。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值