精华内容
下载资源
问答
  • 深度学习训练过程训练的是什么

    千次阅读 2019-03-14 18:16:16
    本文来解释一下深度学习训练过程训练的是什么,换句话说,训练生成的模型文件里记录的是什么。 先笼统回答一下,记录的是网络节点的权重、偏置等参数。不懂网络节点指的是什么的话接着看下文。 先看一个常见的卷积...

    本文来解释一下深度学习训练过程训练的是什么,换句话说,训练生成的模型文件里记录的是什么。
    先笼统回答一下,记录的是网络节点的权重、偏置等参数。不懂网络节点指的是什么的话接着看下文。
    先看一个常见的卷积网络层:

    layer {
      
    	name: "conv1"
      
    	type: "Convolution"
      
    	bottom: "conv1a"
      
    	top: "conv2a"
      
    	param {
        
    		lr_mult: 1    
    		decay_mult: 1
     
    	 }
      
    	param {
        
    		lr_mult: 1    
    		decay_mult: 0
      
    	}
      
    	convolution_param {
        
    		num_output: 96
        
    		pad: 2
        
    		kernel_size: 5
        
    		stride: 2
        
    		weight_filler {
          
    			type: "msra"
        
    			}
        
    		bias_filler {
          
    			type: "constant"
        
    			}
        
    		engine: CUDNN
      
    	}
    
    }

    卷积层num_output为96,要生成96个map,每个map是不同卷积核在bottom的每个map上进行卷积,并将每个对应位置上的值相加然后再加上一个偏置项。
    在反向传播过程中,若第x层的a节点通过权值W对x+1层的b节点有贡献,则在反向传播过程中,梯度通过权值W从b节点传播回a节点。其中a节点,就比如上述卷积网络中bottom conv1a中某个map上的某个像素,b节点就比如top conv2a中某个map上的某个像素。
     

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201904/24/1556075443_196447.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/24/1556075453_205158.jpg) ![图片说明]... !...
  • 浅显易懂GMM模型及其训练过程

    万次阅读 2018-09-26 11:18:09
    定义很好理解,高斯混合模型是一种混合模型,混合基本分布高斯分布而已。 第一个细节:为什么系数之和为0? PRML上给出过一张图: 这图显示了拥有三个高斯分量一个维度GMM如何由其高斯分量叠加而成。...

     

    首先给出GMM的定义

    这里引用李航老师《统计学习方法》上的定义,如下图:

    这里写图片描述

    定义很好理解,高斯混合模型是一种混合模型,混合的基本分布是高斯分布而已。

    第一个细节:为什么系数之和为0?

    PRML上给出过一张图:

    这里写图片描述

    这图显示了拥有三个高斯分量的一个维度的GMM是如何由其高斯分量叠加而成。这张图曾经一度对我理解GMM造成了困扰。因为如果是这样的话,那么这三个高斯分量的系数应该都是1,这样系数之和便为3,才会有这样直接叠加的效果。而这显然不符合GMM的定义。因此,这张图只是在形式上展现了GMM的生成原理而并不精确。

    那么,为什么GMM的各个高斯分量的系数之和必须为1呢?

    其实答案很简单,我们所谓的GMM的定义本质上是一个概率密度函数。而概率密度函数在其作用域内的积分之和必然为1。GMM整体的概率密度函数是由若干个高斯分量的概率密度函数线性叠加而成的,而每一个高斯分量的概率密度函数的积分必然也是1,所以,要想GMM整体的概率密度积分为1,就必须对每一个高斯分量赋予一个其值不大于1的权重,并且权重之和为1。

    第二个细节:求解GMM参数为什么需要用EM算法

    总所周知,求解GMM参数使用EM算法。但是为什么呢?这样是必须的吗?

    首先,类似于其他的模型求解,我们先使用最大似然估计来尝试求解GMM的参数。如下:

    这里写图片描述

    这里写图片描述

    可以看出目标函数是和的对数,很难展开,优化问题麻烦,难以对其进行求偏导处理。因此只能寻求其它方法。那就是EM算法。

    第三个细节:求解GMM的EM算法隐变量的理解

    使用EM算法必须明确隐变量。求解GMM的时候设想观测数据x是这样产生的:首选依赖GMM的某个高斯分量的系数概率(因为系数取值在0~1之间,因此可以看做是一个概率取值)选择到这个高斯分量,然后根据这个被选择的高斯分量生成观测数据。然后隐变量就是某个高斯分量是否被选中:选中就为1,否则为0。

    按照这样的设想:隐变量是一个向量,并且这个向量中只有一个元素取值为1,其它的都是0。因为假设只有一个高斯分量被选中并产生观测数据。然而我们的GMM的一个观测数据在直观上应该是每个高斯分量都有产生,而不是由一个高斯分量单独生成,只是重要性不同(由系数控制)。那么,这样的隐变量假设合理吗?

    答案是合理,只是理解起来比较“费劲”而已。

    首先明确一点:GMM的观测数据是啥,GMM的函数结果又是啥。如果是一个一维的GMM,那么其观测数据就是任意一个实数。而GMM这个概率密度函数在输入这个观测数据之后输出的是这个实数被GMM产生的概率而已。

    接着,现在我们不知道GMM具体的参数值,想要根据观测数据去求解其参数。而GMM的参数是由各个高斯分量的参数再加上权值系数组成的。那么我们就先假定,如果这个观测值只是由其中一个高斯分量产生,去求解其中一个高斯分量的参数。我们假设不同的观测值都有一个产生自己的唯一归宿,就像K-means算法一样。然后在后面的迭代过程中,根据数据整体似然函数的优化过程,逐渐找到一个最优的分配方案。然而,不同于K-means算法的是,我们最终给出的只是某一个观测是由某一个高斯分量唯一生成的概率值,而不是确定下来的属于某一类。每个高斯分量其实都可以产生这个观测数据只是输出不同而已,即产生观测数据的概率不同。最后,根据每个高斯分量产生观测数据的可能性不同,结合其权值汇总出整个GMM产生这个观测数据的概率值。

    终极理解:使用EM算法求解GMM参数

    1、定义隐变量

    我们引入隐变量γjk,它的取值只能是1或者0。

    • 取值为1:第j个观测变量来自第k个高斯分量
    • 取值为0:第j个观测变量不是来自第k个高斯分量

    那么对于每一个观测数据yj都会对应于一个向量变量Γj={γj1,...,γjK},那么有: 

    ∑k=1Kγjk=1

     

    p(Γj)=∏k=1Kαkγjk


    其中,K为GMM高斯分量的个数,αk为第k个高斯分量的权值。因为观测数据来自GMM的各个高斯分量相互独立,而αk刚好可以看做是观测数据来自第k个高斯分量的概率,因此可以直接通过连乘得到整个隐变量Γj的先验分布概率。

     

    2、得到完全数据的似然函数

    对于观测数据yj,当已知其是哪个高斯分量生成的之后,其服从的概率分布为: 

    p(yj|γjk=1;Θ)=N(yj|μk,Σk)


    由于观测数据从哪个高斯分量生成这个事件之间的相互独立的,因此可以写为: 

    p(yj|Γj;Θ)=∏k=1KN(yj|μk,Σk)γjk


    这样我们就得到了已知Γj的情况下单个观测数据的后验概率分布。结合之前得到的Γj的先验分布,则我们可以写出单个完全观测数据的似然函数为: 

    p(yj,Γj;Θ)=∏k=1KαkγjkN(yj|μk,Σk)γjk


    最终得到所有观测数据的完全数据似然函数为: 

    p(y,Γj;Θ)=∏j=1N∏k=1KαkγjkN(yj|μk,Σk)γjk


    取对数,得到对数似然函数为: 

    lnp(y,Γj;Θ)=∑j=1N∑k=1K(γjklnαk+γjklnN(yj|μk,Σk))

     

    3、得到各个高斯分量的参数计算公式

    首先,我们将上式中的lnN(yj|μk,Σk)根据单高斯的向量形式的概率密度函数的表达形式展开: 

    lnN(yj|μk,Σk)=−D2ln(2π)−12ln|Σk|−12(yj−μk)TΣ−1k(yj−μk)

     

    假设我们已经知道隐变量γjk的取值,对上面得到的似然函数分别对αk和Σk求偏导并且偏导结果为零,可以得到:

    μk=∑Nj=1∑Kk=1γjkyj∑Nj=1∑Kk=1γjk

     

    Σk=∑Nj=1∑Kk=1γjk(yj−μk)(yj−μk)T∑Nj=1∑Kk=1γjk


    由于在上面两式的第二个求和符号是对k=1...K求和,而在求和过程中γjk只有以此取到1,其它都是0,因此上面两式可以简化为: 

    μk=∑Nj=1γjkyj∑Nj=1γjk

     

    Σk=∑Nj=1γjk(yj−μk)(yj−μk)T∑Nj=1γjk


    现在参数空间中剩下一个αk还没有求。这是一个约束满足问题,因为必须满足约束ΣKk=1αk=1。我们使用拉格朗日乘子法结合似然函数和约束条件对αk求偏导,可以得到: 

    αk=∑Nj=1γjk−λ


    将上式的左右两边分别对k=1...K求和,可以得到: 

    λ=−N


    将λ代入,最终得到: 

    αk=∑Nj=1γjkN


    至此,我们在隐变量已知的情况下得到了GMM的三种类型参数的求解公式。

     

    4、得到隐变量的估计公式 
    根据EM算法,现在我们需要通过当前参数的取值得到隐变量的估计公式也就是说隐变量的期望的表达形式。即如何求解E{γjk|y,Θ}。 

    E{γjk|y,Θ}=P(γjk=1|y,Θ)

     

    =P(γjk=1,yj|Θ)∑Kk=1P(γjk=1,yj|Θ)

     

    =P(yj|γjk=1,Θ)P(γjk=1|Θ)∑Kk=1P(yj|γjk=1,Θ)P(γjk=1|Θ)

     

    =αkN(yj|μk,Σk)∑Kk=1αkN(yj|μk,Σk)

     

    5、使用EM算法迭代进行参数求解 
    熟悉EM算法的朋友应该已经可以从上面的推导中找到EM算法的E步和M步。

    GMM和K-means直观对比

    最后我们比较GMM和K-means两个算法的步骤。

    GMM:

    • 先计算所有数据对每个分模型的响应度
    • 根据响应度计算每个分模型的参数
    • 迭代

    K-means:

    • 先计算所有数据对于K个点的距离,取距离最近的点作为自己所属于的类
    • 根据上一步的类别划分更新点的位置(点的位置就可以看做是模型参数)
    • 迭代

    可以看出GMM和K-means还是有很大的相同点的。GMM中数据对高斯分量的响应度就相当于K-means中的距离计算,GMM中的根据响应度计算高斯分量参数就相当于K-means中计算分类点的位置。然后它们都通过不断迭代达到最优。不同的是:GMM模型给出的是每一个观测点由哪个高斯分量生成的概率,而K-means直接给出一个观测点属于哪一类。

     

    原文链接:http://www.cnblogs.com/mmziscoming/p/5750849.html

    展开全文
  • 当你训练深度学习模型时,可能必须用到那200000张图,那么训练和测试集分布就不同,这会怎样影响你工作呢?当然将210000张图片随机分裂到训练开发测试集一种方法,但我(吴恩达)不推荐这种方法,记住选择...

    36.什么时候你应该在不同分布上做训练和测试

    当你的猫app已经上传10000张图,你已经人工标记它们有没有猫,同时你有200000张互联网上下载的图,这时你要怎么划分训练开发测试集呢? 
    当你训练深度学习模型时,可能必须用到那200000张图,那么训练和测试集的分布就不同,这会怎样影响你的工作呢? 
    当然将210000张图片随机分裂到训练开发测试集是一种方法,但我(吴恩达)不推荐这种方法,记住选择开发测试集的推荐方法是:选择你未来预期会得到的数据来作为开发测试集。 
    大多数学术文章假设训练开发测试集的分布相同,在机器学习的早期,数据稀缺,常常仅有一个服从同一分布的数据集,所以这一假设能够满足。 
    但在大数据时代,从不同分布所收集来的数据,我们也希望能利用上,因为它能提供大量信息。 
    对于猫检测这个问题,我们会将猫app上传的5000张图放入开发测试集,训练集大小为205000。 
    第二个场景,假设你在做一个语音识别系统为一个导航app来转录得地址,你有20000个用户说的街道地址,500000个语音片段用户说其他的内容,这时你可能用10000个地址样本作为开发测试集,其他用作训练集。 
    我们继续假设你的开发测试集具有相同分布,但是必须明白,训练和开发/测试集分布不同,会带来一些特殊的挑战。 
    Ps:有些学术研究是训练测试分布不同,但理论和实践中有很大的不同,如果你的训练测试不同分布,那么你的结果很大程度受到运气的影响。

    37.如何决定怎么使用你的数据

    延续上一章所说,早期的机器学习算法(需要手动设计特征,用一个简单的分类器),将20000张互联图片纳入训练集是很可能带来风险的。但到了大型神经网络时期,这一风险大大削减。这一现象依赖于是存在一个映射能在两种数据上都能表现良好。换句话说,这里存在一个系统不管输入是用户上传的图片还是互联网图片都能可靠的预测标签,即使不知道图片的来源。 
    加入20000张图片后有以下影响: 
    1.它给你神经网络更多猫是怎么不是怎样的样本。因为用户上传和互联网图片都有共同点,你的神经网络能从互联网图片中学到能应用到用户上传图片的知识。 
    2.它迫使神经网络用一些容量来学习互联网图片独特的特征。如果这些特点和用户上传图片很不同,那么因此,它会损伤你的算法的表现。 
    幸运的是,如果你有足够的容量,那么这可能不是一个重要的问题。如果你没有足够大的神经网络,那么你应该花费更大的精力在你的训练开发测试集保持同分布上。 
    如果你有大量的无关数据,它们跟猫毫无关系,那么就不要把这些数据当做负样本,因为上面所说的第一条的好处可以忽略不计,学到的东西无法应用到你打开发测试集。

    38.如何决定是否包括不一致的数据

    假设你要预测纽约的房价,如果你有底特律的房价,房价比纽约低很多,那么你应该将这些数据加入到你的训练集中吗? 
    房子在底特律还是在纽约会极大影响房价,如果你仅关心纽约的房价,那么最好不加入底特律的数据。 
    那么纽约底特律样本和手机互联网猫图有什么不同吗? 
    猫图不同点在于,一个系统可以可靠的预测y,不论输入是来自互联网图片还是app图片,因此互联网图片和算法系统一致,而底特律纽约则不一致。 
    Ps:事实上可以增加一个新的房子所在地的特征,但是在实际应用中并不常见。

    39.给数据权重

    在实际应用中,互联图片数量是用户上传图片数量的40倍,如果你没有大量的计算资源,那么你给互联网图片更低的权重作为妥协。这种加权重的方式仅仅当你怀疑添加的数据有不同于开发测试集的分布,或者添加的数据远多于和开发测试集相同分布的数据。

    40.从训练集到开发集的泛化

    接着上面的问题讨论,如果你的算法在开发测试集上的误差比你预期的更大,那么可能的原因有: 
    1.在训练集上的表现也不够好,偏差较大。 
    2,在训练集上表现良好,但是不能很好地泛化到和训练集同分布的数据集上,方差较大。 
    3.在和训练集同分布的数据集上表现良好,但在开发和测试集上表现不好,称为data mismatch。 
    例如,假设人类能在猫识别任务上达到近乎完美的表现,你的算法能达到:

    • 1%的训练误差
    • 1.5%的同分布数据集误差
    • 10%的验证集误差

    那么,你可能会尝试让训练数据更接近验证/测试数据,我们之后会讨论一些相关技术。 
    为了诊断到底是什么原因,另外构造一个数据集是非常有必要的,即:一个训练集用作训练,一个“Training dev”数据集不用做训练。 
    那么现在你有四个数据集:

    1. 训练集:算法学习的数据集(来自互联网的图片和从手机app上传的图片),它不需要服从我们真正在乎的分布。
    2. 训练开发集:和训练集同一分布,不用很大
    3. 开发集:和测试集同一分布,反应了我们正在在乎的分布。
    4. 测试集:和开发集同一分布。

    那么现在可以评价:

    1. 训练集误差
    2. 模型泛化到同分布数据集上的能力
    3. 模型在你真正在乎的分布上的表现

    41.识别偏差、方差和数据不匹配

    假设人能在猫识别上达到0%的误差,假设你的算法:

    • 1%的训练误差
    • 5%的训练验证误差
    • 5%的验证误差

    这告诉你的算法高方差。现在假设你的算法:

    • 10%的训练误差
    • 11%的训练验证误差
    • 12%的验证误差

    这告诉你,你的算法有高偏差。一个算法可能同时遭遇到高偏差、高方差和数据不匹配的任意组合,如:

    • 10%的训练误差
    • 11%的训练验证误差
    • 20%的验证误差

    为了更方便的理解各种不同的误差之间的联系,可以把他们画成一个表 
    error table 
    你也可以尝试将空着的两个格子填上,也许你能获得一些算法在不同分布上的效果。对于中间第二格,可以将一小部分B类分布数据加入训练集,然后单独将这一部分的训练误差拿出来。

    42.处理数据不匹配

    假设你开发了一个语音识别系统,在训练集和训练开发集上表现很好,但是在测试集上表现很差:你的算法有数据不匹配的问题。那么我建议你:(i)试着去弄明白训练和验证集上什么属性有不同(ii)试着去获取更多的符合开发集分布的数据 
    例如,你在验证集上做错误分析,假设你发现你的算法系统表现差是因为大多数验证集的语音都是在车内获得的,而训练集中的例子都是在安静背景下获得的,背景音极大的损伤了你算法的表现。这种情况下,你可能会获取更多的车内语音来扩充你的训练集。误差分析的主要目的就是获知训练和开发集的重要不同,就是这个原因导致了数据不匹配。 
    如果你的训练和训练测试集包括了车内语音,你需要再检查一下你的的算法系统在这一数据子集上的表现。如果它在训练集的车内语音上表现良好,而在训练开发集上的车内语音上表现不好,这进一步证实了需要获取更多的车内语言。 
    但不幸的是,这一过程没有保证。例如,如果你没办法获得更多地和验证集同分布的数据,那么你可能找不到一个清晰的道路来提升表现。

    43.人工数据合成

    你的语音系统需要更多类似从车内获取的数据,那么人工合成的方法可能更加简单。 
    假设你获取了大量车或者路上的噪音,你可以从网上下载这些数据。假设你也有一个很大的人在安静背景下说话的训练集,那么如果你把这两个数据“相加”,你将获得类似人在噪音背景下说话的语音。再例如,你可以发现猫识别器项目中,验证集中的手机拍摄的图片很多都有运动模糊,这个时候可以将图片加上运动模糊,让他们更像验证集里的图片。 
    需要注意的是:合成数据的方法,有时创造的数据对人来说是真实的,而不是对电脑来说是真实的。例如你有1000个小时的语音训练集,而仅有1个小时的车噪音,那么合成的数据就会反复使用这段噪音,当人去判断时,噪音对人来说都差不多,而对电脑而言,它会对这段噪音过拟合,所以它的泛化能力可能会很差。 
    另外,假设你有1000个小时的车噪音,但它仅从10台不同的车上提取出来的,那么,这种情况下,可能算法会对着10辆车过拟合并对其他车上的语音表现的很差。不幸的是,这些问题很难被发现。 
    再来一个例子,假设你要做一个计算机视觉系统来识别汽车,假设你和一家游戏公司有合作,这家游戏公司有些车的电脑模型,为了训练你的模型,你用车的电脑模型合成了很多车的图片,即使合成的图片看上去很真实,但是可能这种方法也不会有效,这个游戏可能在整个游戏里设计20辆车。构建车的3D模型是很贵的,你可能不会注意到你一直在看同一辆车,只不过颜色不同罢了,但同所有跑在路上的车来说,这只是分布里的很小的一部分。因此,如果你训练集里100000个样本都来自20辆车,那么你的算法将对这20辆车过拟合,并且很难泛化。 
    当你合成数据时,必须考虑到是否真的合成了具有代表性的数据。同时避免产生能分辨合成和非合成数据的特性,例如所有车都来自20辆原型,所有噪音都来自1个小时的噪声,这一建议很难被遵循。 
    当进行数据合成时,在产生数据前我的团队经常花费数周的时间在一些细节上,使其接近真实分布,以便具有显著效果。但是如果你能能正确的获得这些细节,你就能一下子获得一个比原来大很多的数据集。

    36.什么时候你应该在不同分布上做训练和测试

    当你的猫app已经上传10000张图,你已经人工标记它们有没有猫,同时你有200000张互联网上下载的图,这时你要怎么划分训练开发测试集呢? 
    当你训练深度学习模型时,可能必须用到那200000张图,那么训练和测试集的分布就不同,这会怎样影响你的工作呢? 
    当然将210000张图片随机分裂到训练开发测试集是一种方法,但我(吴恩达)不推荐这种方法,记住选择开发测试集的推荐方法是:选择你未来预期会得到的数据来作为开发测试集。 
    大多数学术文章假设训练开发测试集的分布相同,在机器学习的早期,数据稀缺,常常仅有一个服从同一分布的数据集,所以这一假设能够满足。 
    但在大数据时代,从不同分布所收集来的数据,我们也希望能利用上,因为它能提供大量信息。 
    对于猫检测这个问题,我们会将猫app上传的5000张图放入开发测试集,训练集大小为205000。 
    第二个场景,假设你在做一个语音识别系统为一个导航app来转录得地址,你有20000个用户说的街道地址,500000个语音片段用户说其他的内容,这时你可能用10000个地址样本作为开发测试集,其他用作训练集。 
    我们继续假设你的开发测试集具有相同分布,但是必须明白,训练和开发/测试集分布不同,会带来一些特殊的挑战。 
    Ps:有些学术研究是训练测试分布不同,但理论和实践中有很大的不同,如果你的训练测试不同分布,那么你的结果很大程度受到运气的影响。

    37.如何决定怎么使用你的数据

    延续上一章所说,早期的机器学习算法(需要手动设计特征,用一个简单的分类器),将20000张互联图片纳入训练集是很可能带来风险的。但到了大型神经网络时期,这一风险大大削减。这一现象依赖于是存在一个映射能在两种数据上都能表现良好。换句话说,这里存在一个系统不管输入是用户上传的图片还是互联网图片都能可靠的预测标签,即使不知道图片的来源。 
    加入20000张图片后有以下影响: 
    1.它给你神经网络更多猫是怎么不是怎样的样本。因为用户上传和互联网图片都有共同点,你的神经网络能从互联网图片中学到能应用到用户上传图片的知识。 
    2.它迫使神经网络用一些容量来学习互联网图片独特的特征。如果这些特点和用户上传图片很不同,那么因此,它会损伤你的算法的表现。 
    幸运的是,如果你有足够的容量,那么这可能不是一个重要的问题。如果你没有足够大的神经网络,那么你应该花费更大的精力在你的训练开发测试集保持同分布上。 
    如果你有大量的无关数据,它们跟猫毫无关系,那么就不要把这些数据当做负样本,因为上面所说的第一条的好处可以忽略不计,学到的东西无法应用到你打开发测试集。

    38.如何决定是否包括不一致的数据

    假设你要预测纽约的房价,如果你有底特律的房价,房价比纽约低很多,那么你应该将这些数据加入到你的训练集中吗? 
    房子在底特律还是在纽约会极大影响房价,如果你仅关心纽约的房价,那么最好不加入底特律的数据。 
    那么纽约底特律样本和手机互联网猫图有什么不同吗? 
    猫图不同点在于,一个系统可以可靠的预测y,不论输入是来自互联网图片还是app图片,因此互联网图片和算法系统一致,而底特律纽约则不一致。 
    Ps:事实上可以增加一个新的房子所在地的特征,但是在实际应用中并不常见。

    39.给数据权重

    在实际应用中,互联图片数量是用户上传图片数量的40倍,如果你没有大量的计算资源,那么你给互联网图片更低的权重作为妥协。这种加权重的方式仅仅当你怀疑添加的数据有不同于开发测试集的分布,或者添加的数据远多于和开发测试集相同分布的数据。

    40.从训练集到开发集的泛化

    接着上面的问题讨论,如果你的算法在开发测试集上的误差比你预期的更大,那么可能的原因有: 
    1.在训练集上的表现也不够好,偏差较大。 
    2,在训练集上表现良好,但是不能很好地泛化到和训练集同分布的数据集上,方差较大。 
    3.在和训练集同分布的数据集上表现良好,但在开发和测试集上表现不好,称为data mismatch。 
    例如,假设人类能在猫识别任务上达到近乎完美的表现,你的算法能达到:

    • 1%的训练误差
    • 1.5%的同分布数据集误差
    • 10%的验证集误差

    那么,你可能会尝试让训练数据更接近验证/测试数据,我们之后会讨论一些相关技术。 
    为了诊断到底是什么原因,另外构造一个数据集是非常有必要的,即:一个训练集用作训练,一个“Training dev”数据集不用做训练。 
    那么现在你有四个数据集:

    1. 训练集:算法学习的数据集(来自互联网的图片和从手机app上传的图片),它不需要服从我们真正在乎的分布。
    2. 训练开发集:和训练集同一分布,不用很大
    3. 开发集:和测试集同一分布,反应了我们正在在乎的分布。
    4. 测试集:和开发集同一分布。

    那么现在可以评价:

    1. 训练集误差
    2. 模型泛化到同分布数据集上的能力
    3. 模型在你真正在乎的分布上的表现

    41.识别偏差、方差和数据不匹配

    假设人能在猫识别上达到0%的误差,假设你的算法:

    • 1%的训练误差
    • 5%的训练验证误差
    • 5%的验证误差

    这告诉你的算法高方差。现在假设你的算法:

    • 10%的训练误差
    • 11%的训练验证误差
    • 12%的验证误差

    这告诉你,你的算法有高偏差。一个算法可能同时遭遇到高偏差、高方差和数据不匹配的任意组合,如:

    • 10%的训练误差
    • 11%的训练验证误差
    • 20%的验证误差

    为了更方便的理解各种不同的误差之间的联系,可以把他们画成一个表 
    error table 
    你也可以尝试将空着的两个格子填上,也许你能获得一些算法在不同分布上的效果。对于中间第二格,可以将一小部分B类分布数据加入训练集,然后单独将这一部分的训练误差拿出来。

    42.处理数据不匹配

    假设你开发了一个语音识别系统,在训练集和训练开发集上表现很好,但是在测试集上表现很差:你的算法有数据不匹配的问题。那么我建议你:(i)试着去弄明白训练和验证集上什么属性有不同(ii)试着去获取更多的符合开发集分布的数据 
    例如,你在验证集上做错误分析,假设你发现你的算法系统表现差是因为大多数验证集的语音都是在车内获得的,而训练集中的例子都是在安静背景下获得的,背景音极大的损伤了你算法的表现。这种情况下,你可能会获取更多的车内语音来扩充你的训练集。误差分析的主要目的就是获知训练和开发集的重要不同,就是这个原因导致了数据不匹配。 
    如果你的训练和训练测试集包括了车内语音,你需要再检查一下你的的算法系统在这一数据子集上的表现。如果它在训练集的车内语音上表现良好,而在训练开发集上的车内语音上表现不好,这进一步证实了需要获取更多的车内语言。 
    但不幸的是,这一过程没有保证。例如,如果你没办法获得更多地和验证集同分布的数据,那么你可能找不到一个清晰的道路来提升表现。

    43.人工数据合成

    你的语音系统需要更多类似从车内获取的数据,那么人工合成的方法可能更加简单。 
    假设你获取了大量车或者路上的噪音,你可以从网上下载这些数据。假设你也有一个很大的人在安静背景下说话的训练集,那么如果你把这两个数据“相加”,你将获得类似人在噪音背景下说话的语音。再例如,你可以发现猫识别器项目中,验证集中的手机拍摄的图片很多都有运动模糊,这个时候可以将图片加上运动模糊,让他们更像验证集里的图片。 
    需要注意的是:合成数据的方法,有时创造的数据对人来说是真实的,而不是对电脑来说是真实的。例如你有1000个小时的语音训练集,而仅有1个小时的车噪音,那么合成的数据就会反复使用这段噪音,当人去判断时,噪音对人来说都差不多,而对电脑而言,它会对这段噪音过拟合,所以它的泛化能力可能会很差。 
    另外,假设你有1000个小时的车噪音,但它仅从10台不同的车上提取出来的,那么,这种情况下,可能算法会对着10辆车过拟合并对其他车上的语音表现的很差。不幸的是,这些问题很难被发现。 
    再来一个例子,假设你要做一个计算机视觉系统来识别汽车,假设你和一家游戏公司有合作,这家游戏公司有些车的电脑模型,为了训练你的模型,你用车的电脑模型合成了很多车的图片,即使合成的图片看上去很真实,但是可能这种方法也不会有效,这个游戏可能在整个游戏里设计20辆车。构建车的3D模型是很贵的,你可能不会注意到你一直在看同一辆车,只不过颜色不同罢了,但同所有跑在路上的车来说,这只是分布里的很小的一部分。因此,如果你训练集里100000个样本都来自20辆车,那么你的算法将对这20辆车过拟合,并且很难泛化。 
    当你合成数据时,必须考虑到是否真的合成了具有代表性的数据。同时避免产生能分辨合成和非合成数据的特性,例如所有车都来自20辆原型,所有噪音都来自1个小时的噪声,这一建议很难被遵循。 
    当进行数据合成时,在产生数据前我的团队经常花费数周的时间在一些细节上,使其接近真实分布,以便具有显著效果。但是如果你能能正确的获得这些细节,你就能一下子获得一个比原来大很多的数据集。

    转载于:https://www.cnblogs.com/demo-deng/p/10172441.html

    展开全文
  • <div><p>运行第三章3.3.4节开始训练的命令后,开始一直卡在INFO:tensorflow:global_step/sec=0,一直重复输出,一段时间后,然后就一直卡在INFO:tensorflow:S**ing checkpoint to path ...
  • BERT全称Bidirectional Encoder Representation from Transformers,Google2018年提出训练模型,即双向TransformerEncoder,因为decoder不能获要预测信息模型的主要创新点都在pre-train方法上,...

    1. 什么是BERT

    BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。

    Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得。那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角度看一般,创新不算大。但是架不住效果太好了,基本刷新了很多NLP的任务的最好性能,有些任务还被刷爆了,这个才是关键。另外一点是Bert具备广泛的通用性,就是说绝大部分NLP任务都可以采用类似的两阶段模式直接去提升效果,这个第二关键。客观的说,把Bert当做最近两年NLP重大进展的集大成者更符合事实。

    2. 从Word Embedding到Bert模型的发展

    2.1 图像的预训练

    自从深度学习火起来后,预训练过程就是做图像或者视频领域的一种比较常规的做法,有比较长的历史了,而且这种做法很有效,能明显促进应用的效果。

    那么图像领域怎么做预训练呢,上图展示了这个过程,

    1. 我们设计好网络结构以后,对于图像来说一般是CNN的多层叠加网络结构,可以先用某个训练集合比如训练集合A或者训练集合B对这个网络进行预先训练,在A任务上或者B任务上学会网络参数,然后存起来以备后用。

    2. 假设我们面临第三个任务C,网络结构采取相同的网络结构,在比较浅的几层CNN结构,网络参数初始化的时候可以加载A任务或者B任务学习好的参数,其它CNN高层参数仍然随机初始化。

    3. 之后我们用C任务的训练数据来训练网络,此时有两种做法:

      一种是浅层加载的参数在训练C任务过程中不动,这种方法被称为“Frozen”;

      另一种是底层网络参数尽管被初始化了,在C任务训练过程中仍然随着训练的进程不断改变,这种一般叫“Fine-Tuning”,顾名思义,就是更好地把参数进行调整使得更适应当前的C任务。

    一般图像或者视频领域要做预训练一般都这么做。这样做的优点是:如果手头任务C的训练集合数据量较少的话,利用预训练出来的参数来训练任务C,加个预训练过程也能极大加快任务训练的收敛速度,所以这种预训练方式是老少皆宜的解决方案,另外疗效又好,所以在做图像处理领域很快就流行开来。

    为什么预训练可行

    对于层级的CNN结构来说,不同层级的神经元学习到了不同类型的图像特征,由底向上特征形成层级结构,所以预训练好的网络参数,尤其是底层的网络参数抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。

    2.2 Word Embedding

    神经网络语言模型(NNLM)的思路。先说训练过程。学习任务是输入某个句中单词 [公式] 前面句子的t-1个单词,要求网络正确预测单词Bert,即最大化:

    [公式]

    前面任意单词 [公式] 用Onehot编码(比如:0001000)作为原始单词输入,之后乘以矩阵Q后获得向量 [公式] ,每个单词的 [公式] 拼接,上接隐层,然后接softmax去预测后面应该后续接哪个单词。这个 [公式] 是什么?这其实就是单词对应的Word Embedding值,那个矩阵Q包含V行,V代表词典大小,每一行内容代表对应单词的Word embedding值。只不过Q的内容也是网络参数,需要学习获得,训练刚开始用随机值初始化矩阵Q,当这个网络训练好之后,矩阵Q的内容被正确赋值,每一行代表一个单词对应的Word embedding值。所以你看,通过这个网络学习语言模型任务,这个网络不仅自己能够根据上文预测后接单词是什么,同时获得一个副产品,就是那个矩阵Q,这就是单词的Word Embedding。

    2013年最火的用语言模型做Word Embedding的工具是Word2Vec,后来又出了Glove,Word2Vec。对于这两个模型不熟悉的可以参考我之前的文章,这里不再赘述:

    上面这种模型做法就是18年之前NLP领域里面采用预训练的典型做法,之前说过,Word Embedding其实对于很多下游NLP任务是有帮助的,只是帮助没有大到闪瞎忘记戴墨镜的围观群众的双眼而已。那么新问题来了,为什么这样训练及使用Word Embedding的效果没有期待中那么好呢?答案很简单,因为Word Embedding有问题呗。这貌似是个比较弱智的答案,关键是Word Embedding存在什么问题?这其实是个好问题。

    **这片在Word Embedding头上笼罩了好几年的乌云是什么?是多义词问题。**我们知道,多义词是自然语言中经常出现的现象,也是语言灵活性和高效性的一种体现。多义词对Word Embedding来说有什么负面影响?如上图所示,比如多义词Bank,有两个常用含义,但是Word Embedding在对bank这个单词进行编码的时候,是区分不开这两个含义的,因为它们尽管上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过word2vec,都是预测相同的单词bank,而同一个单词占的是同一行的参数空间,这导致两种不同的上下文信息都会编码到相同的word embedding空间里去。所以word embedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。

    有没有简单优美的解决方案呢?ELMO提供了一种简洁优雅的解决方案。

    2.3 ELMO

    ELMO是“Embedding from Language Models”的简称,其实这个名字并没有反应它的本质思想,提出ELMO的论文题目:“Deep contextualized word representation”更能体现其精髓,而精髓在哪里?在deep contextualized这个短语,一个是deep,一个是context,其中context更关键。

    在此之前的Word Embedding本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变,所以对于比如Bank这个词,它事先学好的Word Embedding中混合了几种语义 ,在应用中来了个新句子,即使从上下文中(比如句子包含money等词)明显可以看出它代表的是“银行”的含义,但是对应的Word Embedding内容也不会变,它还是混合了多种语义。这是为何说它是静态的,这也是问题所在。

    ELMO的本质思想是:我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMO本身是个根据当前上下文对Word Embedding动态调整的思路。

    ELMO采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。

    上图展示的是其预训练过程,它的网络结构采用了双层双向LSTM,目前语言模型训练的任务目标是根据单词 [公式] 的上下文去正确预测单词 [公式][公式] 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。

    图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外 [公式] 的上文Context-before;右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的句子下文Context-after;每个编码器的深度都是两层LSTM叠加。

    这个网络结构其实在NLP中是很常用的。使用这个网络结构利用大量语料做语言模型任务就能预先训练好这个网络,如果训练好这个网络后,输入一个新句子 [公式] ,句子中每个单词都能得到对应的三个Embedding:

    • 最底层是单词的Word Embedding;
    • 往上走是第一层双向LSTM中对应单词位置的Embedding,这层编码单词的句法信息更多一些;
    • 再往上走是第二层LSTM中对应单词位置的Embedding,这层编码单词的语义信息更多一些。

    也就是说,ELMO的预训练过程不仅仅学会单词的Word Embedding,还学会了一个双层双向的LSTM网络结构,而这两者后面都有用。

    上面介绍的是ELMO的第一阶段:预训练阶段。那么预训练好网络结构后,如何给下游任务使用呢?上图展示了下游任务的使用过程,比如我们的下游任务仍然是QA问题:

    1. 此时对于问句X,我们可以先将句子X作为预训练好的ELMO网络的输入,这样句子X中每个单词在ELMO网络中都能获得对应的三个Embedding;
    2. 之后给予这三个Embedding中的每一个Embedding一个权重a,这个权重可以学习得来,根据各自权重累加求和,将三个Embedding整合成一个;
    3. 然后将整合后的这个Embedding作为X句在自己任务的那个网络结构中对应单词的输入,以此作为补充的新特征给下游任务使用。对于上图所示下游任务QA中的回答句子Y来说也是如此处理。

    因为ELMO给下游提供的是每个单词的特征形式,所以这一类预训练的方法被称为“Feature-based Pre-Training”。

    前面我们提到静态Word Embedding无法解决多义词的问题,那么ELMO引入上下文动态调整单词的embedding后多义词问题解决了吗?解决了,而且比我们期待的解决得还要好。对于Glove训练出的Word Embedding来说,多义词比如play,根据它的embedding找出的最接近的其它单词大多数集中在体育领域,这很明显是因为训练数据中包含play的句子中体育领域的数量明显占优导致;而使用ELMO,根据上下文动态调整后的embedding不仅能够找出对应的“演出”的相同语义的句子,而且还可以保证找出的句子中的play对应的词性也是相同的,这是超出期待之处。之所以会这样,是因为我们上面提到过,第一层LSTM编码了很多句法信息,这在这里起到了重要作用。

    ELMO有什么值得改进的缺点呢

    • 首先,一个非常明显的缺点在特征抽取器选择方面,ELMO使用了LSTM而不是新贵Transformer,Transformer是谷歌在17年做机器翻译任务的“Attention is all you need”的论文中提出的,引起了相当大的反响,很多研究已经证明了Transformer提取特征的能力是要远强于LSTM的。如果ELMO采取Transformer作为特征提取器,那么估计Bert的反响远不如现在的这种火爆场面。
    • 另外一点,ELMO采取双向拼接这种融合特征的能力可能比Bert一体化的融合特征方式弱,但是,这只是一种从道理推断产生的怀疑,目前并没有具体实验说明这一点。

    2.4 GPT

    GPT是“Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。

    上图展示了GPT的预训练过程,其实和ELMO是类似的,主要不同在于两点:

    • 首先,特征抽取器不是用的RNN,而是用的Transformer,上面提到过它的特征抽取能力要强于RNN,这个选择很明显是很明智的;
    • 其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,所谓“单向”的含义是指:语言模型训练的任务目标是根据 [公式] 单词的上下文去正确预测单词 [公式][公式] 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。

    如果对Transformer模型不太了解的,可以参考我写的文章:Transformer

    ELMO在做语言模型预训练的时候,预测单词 [公式] 同时使用了上文和下文,而GPT则只采用Context-before这个单词的上文来进行预测,而抛开了下文。这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。如果预训练时候不把单词的下文嵌入到Word Embedding中,是很吃亏的,白白丢掉了很多信息。

    2.5 BERT

    Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,即双向的Transformer,当然另外一点是语言模型的数据规模要比GPT大。所以这里Bert的预训练过程不必多讲了。模型结构如下:

    对比OpenAI GPT(Generative pre-trained transformer),BERT是双向的Transformer block连接;就像单向rnn和双向rnn的区别,直觉上来讲效果会好一些。

    对比ELMo,虽然都是“双向”,但目标函数其实是不同的。ELMo是分别以[公式][公式] 作为目标函数,独立训练处两个representation然后拼接,而BERT则是以 [公式] 作为目标函数训练LM。

    BERT预训练模型分为以下三个步骤:Embedding、Masked LM、Next Sentence Prediction

    2.5.1 Embedding

    这里的Embedding由三种Embedding求和而成:

    • Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
    • Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
    • Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的

    2.5.2 Masked LM

    MLM可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK]

    此处将hairy进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么,但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:

    80%是采用[mask],my dog is hairy → my dog is [MASK]

    10%是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple

    10%保持不变,my dog is hairy -> my dog is hairy

    注意:这里的10%是15%需要mask中的10%

    那么为啥要以一定的概率使用随机词呢?这是因为transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。Transformer全局的可视,又增加了信息的获取,但是不让模型获取全量信息。

    2.5.3 Next Sentence Prediction

    选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%的数据B是语料库中随机选择的,学习其中的相关性,添加这样的预训练的目的是目前很多NLP的任务比如QA和NLI都需要理解两个句子之间的关系,从而能让预训练的模型更好的适应这样的任务。
    个人理解:

    • Bert先是用Mask来提高视野范围的信息获取量,增加duplicate再随机Mask,这样跟RNN类方法依次训练预测没什么区别了除了mask不同位置外;
    • 全局视野极大地降低了学习的难度,然后再用A+B/C来作为样本,这样每条样本都有50%的概率看到一半左右的噪声;
    • 但直接学习Mask A+B/C是没法学习的,因为不知道哪些是噪声,所以又加上next_sentence预测任务,与MLM同时进行训练,这样用next来辅助模型对噪声/非噪声的辨识,用MLM来完成语义的大部分的学习。

    3. BERT的评价

    总结下BERT的主要贡献:

    • 引入了Masked LM,使用双向LM做模型预训练。
    • 为预训练引入了新目标NSP,它可以学习句子与句子间的关系。
    • 进一步验证了更大的模型效果更好: 12 --> 24 层。
    • 为下游任务引入了很通用的求解框架,不再为任务做模型定制。
    • 刷新了多项NLP任务的记录,引爆了NLP无监督预训练技术。

    BERT优点

    • Transformer Encoder因为有Self-attention机制,因此BERT自带双向功能。
    • 因为双向功能以及多层Self-attention机制的影响,使得BERT必须使用Cloze版的语言模型Masked-LM来完成token级别的预训练。
    • 为了获取比词更高级别的句子级别的语义表征,BERT加入了Next Sentence Prediction来和Masked-LM一起做联合训练。
    • 为了适配多任务下的迁移学习,BERT设计了更通用的输入层和输出层。
    • 微调成本小。

    BERT缺点

    • task1的随机遮挡策略略显粗犷,推荐阅读《Data Nosing As Smoothing In Neural Network Language Models》。
    • [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现。每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)。
    • BERT对硬件资源的消耗巨大(大模型需要16个tpu,历时四天;更大的模型需要64个tpu,历时四天。

    评价

    Bert是NLP里里程碑式的工作,对于后面NLP的研究和工业应用会产生长久的影响,这点毫无疑问。但是从上文介绍也可以看出,从模型或者方法角度看,Bert借鉴了ELMO,GPT及CBOW,主要提出了Masked 语言模型及Next Sentence Prediction,但是这里Next Sentence Prediction基本不影响大局,而Masked LM明显借鉴了CBOW的思想。所以说Bert的模型没什么大的创新,更像最近几年NLP重要进展的集大成者,这点如果你看懂了上文估计也没有太大异议,如果你有大的异议,杠精这个大帽子我随时准备戴给你。如果归纳一下这些进展就是:

    • 首先是两阶段模型,第一阶段双向语言模型预训练,这里注意要用双向而不是单向,第二阶段采用具体任务Fine-tuning或者做特征集成;
    • 第二是特征抽取要用Transformer作为特征提取器而不是RNN或者CNN;
    • 第三,双向语言模型可以采取CBOW的方法去做(当然我觉得这个是个细节问题,不算太关键,前两个因素比较关键)。

    Bert最大的亮点在于效果好及普适性强,几乎所有NLP任务都可以套用Bert这种两阶段解决思路,而且效果应该会有明显提升。可以预见的是,未来一段时间在NLP应用领域,Transformer将占据主导地位,而且这种两阶段预训练方法也会主导各种应用。

    4. 代码实现

    bert中文分类实践

    机器学习通俗易懂系列文章

    5. 参考文献


    作者:@mantchs

    GitHub:https://github.com/NLP-LOVE/ML-NLP

    欢迎大家加入讨论!共同完善此项目!群号:【541954936】NLP面试学习群

    展开全文
  • 模型训练

    2021-04-09 13:37:08
    这篇文章主要分享一下模型训练的一般流程,这里将其命名为【独孤九剑】,哈哈尊重风清扬老前辈,目的让大家明白做一个算法模型过程中会涉及的流程和数据特征在算法模型中的重要性。 作为一名算法工程师训练模型...
  • 举个栗子: 1.你可以把机器想象成一个小孩子,你带小孩去公园。...所形成认知模式,就是”模型“。 训练之后。这时,再跑过来一个动物时,你问小孩,这个狗吧?他会回答,/否。这个就叫,预测。 一个...
  • 一句话总结:通过算法 去 引导模型训练数据,最终使得模型可用,该模型训练数据的过程就是机器学习的过程 一直以来总感觉手写体识别并不适合作为机器学习开篇的基础认知讲解。终究觉得它还不够那么的直观和形象...
  • 模型训练Shuffle什么是Shuffle?模型训练过程中需要Shuffle么?Shuffle为什么重要?小结Reference 什么是Shuffle? shuffle(中文意思:洗牌,混乱)。shuffle在机器学习与深度学习中代表意思,将训练模型...
  • 其实我们已经训练了模型了,例如决策树的生成时模型训练,adaboost的实现也是模型训练的过程,所以我们已经训练了好几个模型,只是那个具体的模型,并且我们没有把模型保存下来 可能觉得自己不是在训练模型。 模型...
  • 模型训练过程中各个分支输出正常,但是在跑验证集时某个分支输出效果很差,输出内容几乎一副黑图,啥东西都没有。我做了网友给两个解决办法,还是没能解决我问题。 一开始我很烦躁,因为之前在其他模型测试...
  • 模型训练笔记

    2020-11-25 00:03:16
    Training 的过程实质优化 How do you explain Machine Learning and Data Mining to non Computer Science people? 什么是机器学习中的 训练数据、算法、模型 ? 二、机器学习模型构建流程 1. 数据集 本质...
  • 该函数涉及了多种噪声引入方式,非常形象地阐释了为什么BERT被称为"自编码"模型,以及为什么把BERT对预训练输入的处理称为"加噪声",以及为何会将"自编码"过程(即预训练的训练过程)称为"降噪"。“噪声"BERT故意...
  • 这篇文章主要分享一下模型训练的一般流程,目的让大家明白做一个算法模型过程中会涉及的流程和数据特征在算法模型中的重要性。 作为一名算法工程师训练模型可谓家常便饭,不管做推荐中的召回模型、排序模型...
  • 训练 LSTM 的模型和使用模型去预测

    千次阅读 2020-06-09 21:18:35
    长短期记忆(Long short-term memory, LSTM)一种特殊RNN,主要为了解决长序列训练过程梯度消失和梯度爆炸问题。简单来说,就是相比普通RNN,LSTM能够在更长序列中有更好表现。 用LSTM提取时序...
  • 这篇文章主要分享一下模型训练的一般流程,这里将其命名为【独孤九剑】,哈哈尊重风清扬老前辈,目的让大家明白做一个算法模型过程中会涉及的流程和数据特征在算法模型中的重要性。 作为一名算法工程师训练模型...
  • 在调用sklearnSVM时,如果设置verbose=True,模型训练结束后会显示一些训练过程的说明信息,如下(以下OCSVM返回结果): * optimization finished, # iter = 32 obj = 192.154077, rho = 19.244379 nSV = 26, ...
  • 深度学习模型的训练就像是「黑箱操作」,知道输入是什么、输出是什么,但中间过程就像个黑匣子,这使得研究人员可能花费大量时间找出模型运行不正常原因。假如有一款可视化工具,能够帮助研究人员更好地理解模型...
  • 训练过程请教

    2020-12-08 18:03:03
    然后我从前面的训练模型中挑选第10w(随机选)次作为我新初始化权重,此时使用width:height=512:320来重新训练。我这种思路对不对,如果可以话这个时候我学习率应该如何调,有没有什么方法...
  • GPU是什么玩意儿我觉得不必多说,只要知道它是可以让你在计算机视觉任务中一步封神传说级道具就行了,但这个爆率,非常低,maybe只有1%... Cuda、Cudnn,百度一搜基本上都是这两个内容,接下来由我来解答一下...
  • 目前深度学习神经网络中,训练过程是基于梯度下降法来进行参数优化。通过一步步迭代,来求得最小损失函数和最优的模型权重。 进行梯度下降时会给每一个参数赋一个初始值。一般我们希望数据和参数均值都为0,...
  • 在tensorflow训练模型,我直接采用同一个session进行测试,得到结果较好,但是采用训练完保存的模型,进行重新载入进行测试,结果较差,不懂什么会出现这样结果。注:测试数据一样。以下是模型结果: ...
  • Etiketai设计用于标记图像在线工具,可用于训练AI模型。 完全客户端,没有对任何服务器请求。 它通过Next.js + Preact实现。 批注以PASCAL VOC格式(ImageNet使用格式)另存为XML文件。 此外,它还...
  • 深度学习 模型训练超参数调整总结

    千次阅读 2020-04-01 17:23:02
    在深度神经网络中,超参数调整一项必备技能,通过观察在训练过程监测指标如损失loss和准确率来判断当前模型处于什么的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。在本研究中使用了...
  • 深度学习模型训练注意事项

    千次阅读 2019-03-07 14:46:56
    模型训练本质上就是调整w和b的过程,好的开始成功的一半。(为什么不0初始化?哪三种常用的初始化方法?https://blog.csdn.net/weixin_43167121/article/details/88176101) 优化学习率 学习率太小,会增加迭代...
  • 过拟合(overfitting)指的是模型训练数据表现非常好,但是在验证集上表现特别差。 欠拟合(underfitting)指的是是模型训练数据和验证集上表现都比较差。 2.降低过拟合和欠拟合方法 降低过拟合方法: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,268
精华内容 507
关键字:

模型训练的过程是什么过程