精华内容
下载资源
问答
  • Mini-batch
    2021-05-30 09:18:44

    深度学习的优化算法,就是梯度下降。每次的参数更新有两种方式。

    第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。

    另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

    为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批(batch),按批来更新参数,batch size 就是每一批的数据量。

    这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

    batch的思想,至少有两个作用,一是更好的处理非凸的损失函数,非凸的情况下, 全样本就算工程上算的动, 也会卡在局部优上, 批batch表示了全样本的部分抽样实现, 相当于人为引入修正梯度上的采样噪声,使“一路不通找别路”更有可能搜索最优值;二是合理利用内存容量。

    更多相关内容
  • 自己微调版本,含注释和数据集,一个程序就能运行,是吴恩达深度学习课程的课后作业
  • 深度学习入门-mini-batch学习

    千次阅读 2022-04-20 14:22:43
    作为保护性对策,添加一个微小值可以防止负无限大的发生 训练集所有损失函数的和 神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习,称为mini-batch学习 import...

    在这里插入图片描述

    深度学习属于端到端的学习,从原始数据(输入)中获得目标结果(输出)的意思。
    神经网络的优点是对所有的问题都可以用同样的流程来解决。
    比如,不管要求解的问题是识别5,还是识别狗,抑或是识别人脸,神经网络都是通
    过不断地学习所提供的数据,尝试发现待求解的问题的模式。
    也就是说,与待处理的问题无关,神经网络可以将数据直接作为原始数据,进行“端对端”
    的学习。

    神经网络的学习所用指标是损失函数。两种常用的损失函数:

    均方误差:

    在这里插入图片描述
    y是神经网络输出,t是监督数据

    import numpy as np
    def mean_squared_error(y,t):
        '''
        y is the output value,and the t is real value
        '''
        return 0.5 * np.sum((y-t)**2)
    

    交叉熵误差:

    在这里插入图片描述

    交叉熵误差的值是由正确解标签所对应的输出结果决定的,正确解标签对应的输出越大,值越接近0

    def cross_entropy_error(y,t):
        delta = 1e-7
        return -np.sum(t * np.log(y+delta))
    

    函数内部在计算 np.log 时,加上了一个微小值 delta 。这是因为,当出现 np.log(0) 时, np.log(0) 会变为负无限大的 -inf ,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无限大的发生

    训练集所有损失函数的和

    在这里插入图片描述

    神经网络的学习也是从训练数据中选出一批数据(称为mini-batch,小批量),然后对每个mini-batch进行学习,称为mini-batch学习

    import os,sys
    sys.path.append(os.pardir)
    from dataset.mnist import load_mnist
    
    (x_train, t_train),(x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
    
    x_train.shape
    t_train.shape
    x_test.shape
    t_test.shape
    
    train_size = x_train.shape[0]
    batch_size = 10
    batch_mask = np.random.choice(train_size, batch_size) #np.random.choice(60000, 10) 会从0到59999之间随机选择10个数字
    x_batch = x_train[batch_mask]
    t_batch = t_train[batch_mask]
    
    展开全文
  • 1.mini-batch梯度下降:用子训练集进行梯度下降。 2.batch梯度下降:用整个训练集进行梯度下降 3.随机梯度下降:用一个样本进行梯度下降 4.epoch:对整个训练集进行一次梯度下降 训练神经网络的目的就是找到一组参数...

    几个专业术语
    1.mini-batch梯度下降:用子训练集进行梯度下降。
    2.batch梯度下降:用整个训练集进行梯度下降
    3.随机梯度下降:用一个样本进行梯度下降
    4.epoch:对整个训练集进行一次梯度下降

    训练神经网络的目的就是找到一组参数使成本函数最小,下图代表了成本函数,中间点为最小。蓝色的代表batch梯度下降,紫色的代表随机梯度下降,绿色的代表mini-batch梯度下降。有人会觉得直接使用batch梯度下降不是很好吗,但如果输入的数据集过大的话,电脑的cpu不能承受,并且学习周期太过漫长,如果数据集不是很大,就另当别论了。
    在这里插入图片描述
    指数加权平均
    要用很短的篇幅来详细讲解几乎是不可能的,所以这里只是简单的介绍一下。
    公式:Vt=k*Vt-1+(1-k)*Wt

    在编程中实现加权平均:
    v=0
    for i in 100:
    v=k*v+(1-k)*w

    求子训练集的代码实现

    #获取子训练集
    def random_mini_batches(X,Y,mini_batch_size=64,seed=0):
        #设置随机数种子
        np.random.seed(seed)
        #获取样本数量
        m=X.shape[1]
        #存储分割后的训练集
        mini_batches=[]
        #对训练集进行洗牌
        #这行代码会产生m范围内的随机整数,且里面的数是0到m-1
        permutation=list(np.random.permutation(m))
        #这行代码会将每一列按permutation列表中的随机索引进行洗牌,每一列代表一个训练数据
        shuffled_X=X[:,permutation]
        shuffled_Y=Y[:,permutation].reshape((1,m))
        
        #获取子训练集的个数,不包括不满mini_batch_size的训练集
        num_complete_minibatches=math.floor(m/mini_batch_size)
        #分割洗牌后的训练集
        for k in range(0,num_complete_minibatches):
            mini_batch_X=shuffled_X[:,k*mini_batch_size:(k+1)*mini_batch_size]
            mini_batch_Y=shuffled_Y[:,k*mini_batch_size:(k+1)*mini_batch_size]
            mini_batch=(mini_batch_X,mini_batch_Y)
            mini_batches.append(mini_batch)
        #将不满mini_batch_size的训练集也添加进来
        if m%mini_batch_size!=0:
            mini_batch_X=shuffled_X[:,num_complete_minibatches*mini_batch_size:]
            mini_batch_Y=shuffled_Y[:,num_complete_minibatches*mini_batch_size:]
            mini_batch=(mini_batch_X,mini_batch_Y)
            mini_batches.append(mini_batch)
            
        return mini_batches
    

    更新参数W和b

    def update_parameters_with_gd(parameters, grads, learning_rate):
     
        L = len(parameters) // 2 
    
        for l in range(L):
            parameters["W" + str(l + 1)] = parameters["W" + str(l + 1)] - learning_rate * grads["dW" + str(l + 1)]
            parameters["b" + str(l + 1)] = parameters["b" + str(l + 1)] - learning_rate * grads["db" +str(l+1)]        
        return parameters
    

    mini_batch神经网络训练模型

    def model(X, Y, layers_dims,learning_rate=0.0007, mini_batch_size=64,num_epochs=10000, print_cost=True):
        
        L = len(layers_dims)            
        costs = []                                                 
        seed = 10                      
        
        parameters = initialize_parameters(layers_dims)
        # 一个epoch就是遍历整个数据集一遍,一个epoch里面可以有多个minibatch
        for i in range(num_epochs):
            # 下面的seed进行了加1处理,是为了让每个epoch中的洗牌后数据集都不同。这样一来,每次的minibatch都包含了不同的训练样本。
            seed = seed + 1
            minibatches = random_mini_batches(X, Y, mini_batch_size, seed)
            # 遍历每个minibatch
            for minibatch in minibatches:
    
                # 分出x和y
                (minibatch_X, minibatch_Y) = minibatch
    
                a3, caches = forward_propagation(minibatch_X, parameters)
    
                cost = compute_cost(a3, minibatch_Y)
    
                grads = backward_propagation(minibatch_X, minibatch_Y, caches)
    
                parameters = update_parameters_with_gd(parameters, grads, learning_rate)
           
            
            if print_cost and i % 1000 == 0:
                print("Cost after epoch %i: %f" % (i, cost))
            if print_cost and i % 100 == 0:
                costs.append(cost)
        #将成本函数以图象的形式显示出来            
        plt.plot(costs)
        plt.ylabel('cost')
        plt.xlabel('epochs (per 100)')
        plt.title("Learning rate = " + str(learning_rate))
        plt.show()
        return parameters
    
    

    ps:大家如果真的想学习人工智能方面的知识,请点击下方链接:人工智能社区,讲的非常通俗易懂,适用于各个阶段的学习者。

    展开全文
  • 三种梯度下降方法:BGD, SGD, mini-batch 六种优化算法:momentum、nesterov momentum、Adagrad、Adadelta、RMSprop、Adam 梯度检验 batch normalization recurrent neural network (RNN) Note: 下列 1-10中网络...
  • mini-batch梯度下降法

    2022-03-11 11:25:33
    1.什么是mini-batch 把训练集分为数个子训练集,比如每个子训练集中包含1000个单个样本,子训练集就被成为mini-batch。 2.损失函数的曲线 我们发现出现了噪声,这些噪声产生的原因是,我们的子训练集是难以训练的,...

    1.什么是mini-batch

    把训练集分为数个子训练集,比如每个子训练集中包含1000个单个样本,子训练集就被成为mini-batch。

    2.损失函数的曲线

    在这里插入图片描述
    我们发现出现了噪声,这些噪声产生的原因是,我们的子训练集是难以训练的,不可能一直下降,所以出现摆动正常的,我们需要决定的变量是训练集的大小。

    3.mini-batch大小的确定

    当训练集的大小等于整个训练集的个数m时,此时为BGD算法,它的噪声很小,能准确的找到最小值,但是数据量多时,它的运算时间太长,因为它要把所有的样本都训练一遍。
    相反,当训练集的大小等于1时,此时为SGD算法,它的运算速度较快,但由于它每次只计算一个样本,因此它的噪声很大,且它很难找到最小值,而是在最小值附近波动,因为它不收敛。mini-batch的大小应在1-m之间。
    当样本量小于2000时,使用BGD;当样本量大时,mini-batch的大小一般为64、128、256、512,因为是2的次方的话,代码运行的快一些。

    展开全文
  • mini-batchbatch到底是什么

    千次阅读 2021-08-08 10:26:35
    mini-batch是将所有数据分批,然后按顺序处理,每一批计算一次loss,更新参数,然后下一批。也就是我们代码必用的(例如batch_size=128),只是我以前一直以为这个叫做batch,原来这个叫做mini-batch。 所以以后要...
  • PyG框架:mini-batch

    2022-01-05 10:19:54
    一、mini-batch 在graph classification的一些基准数据集中,每个图的样本都很小,如果每次只操作一个,不能充分利用GPU资源。所以考虑把它们分成多个mini-batch。 1、原理 mini-batch就是并行处理多个图,这里把多...
  • 在机器学习或深度学习中,一般采取梯度下降对参数进行优化更新,本文主要讨论Mini-Batch算法、Momentum算法、RMSprop以及Adam算法。 1.2 为什么要改进梯度下降 对于一个数据量适中的数据集而言,可以直接利用梯度...
  • 前言 流式聚合(streaming aggregation)是我们编写实时业务逻辑时非常常见的场景,当然也比较容易出现...本文对其中常用的Mini-Batch做个简要的介绍,顺便从源码看一看它的实现思路。 注意:截至当前版本,Flink ...
  • 先前我们学习的内容一种情况是采用Full-Batch来训练数据,还有一种情况是在随机梯度下降中,只去其中一个数据来计算梯度,这种情况可以使我我们很好的解决训练数据时...Batch-Size Iteration shuffle 是否打乱顺序
  • Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。 首先,为什么需要有 Batch_Size 这个参数? Batch 的选择,首先决定的是下降的方向。如果数据集比较小,完全可以采用全数据集 ( ...
  • mini-batch Gradient Descent

    千次阅读 多人点赞 2019-04-11 17:18:19
    点击此处返回总目录 前面已经讲过梯度下降法家族中的批量梯度下降法(BGD)和随机梯度下降法(SGD),今天说一下mini-batch Gr...
  • Mini-Batch 梯度下降

    2020-03-09 01:25:38
    这篇文章简要介绍什么是 mini-batch 梯度下降算法及其特点 在训练网络时,如果训练数据非常庞大,那么把所有训练数据都输入一次神经网络需要非常长的时间,另外,这些数据可能根本无法一次性装入内存。人们在实践中...
  • 【零基础】神经网络优化之mini-batch

    千次阅读 2019-10-27 23:16:28
     本篇要介绍的优化方法叫mini-batch,它主要解决的问题是:实际应用时的训练数据往往都太大了,一次加载到电脑里可能内存不够,其次运行速度也很慢。那自然就想到说,不如把训练数据分割成好几份,一次学习一份不就...
  • 文章目录‍梯度下降‍随机梯度下降‍mini-batch梯度下降‍总结 ‍梯度下降 梯度下降又名批量梯度下降(Batch Gradient Descent),采用的方法是计算一个epoch(每个epoch都包含所有样本量)中所有样本的Loss和,对...
  • pytorch Mini-Batch

    2021-04-29 16:34:56
    梯度下降有几种选择: 梯度下降(BatchGD): 计算速度快(运用GPU的并行能力),但是数据集大的话硬件受不了 随机梯度下降(SGD):...Iteration:数据集中有多少个batch 例如1000个样本 batch-size为100 那么iterati
  • 文章目录1.1 mini-batch梯度下降法1.1.1 mini-batch算法的基本思路1.1.2 更好地理解mini-batch算法1.1.3使用mini-batch算法的实例 在本周的学习笔记中,我将会记录一种常用的优化算法,用于加速神经网络的训练 1.1...
  • 2.2 理解Mini-batch

    2018-08-31 10:36:15
    Batch gradient descent: With batch gradient descent on every iteration you go through the entire training set and you’d expect the cost to go down on every single iteration. So if we’ve had the co....
  • 首先,如果训练集较小,直接使用batch梯度下降法,样本集较小就没必要使用mini-batch梯度下降法,你可以快速处理整个训练集,所以使用batch梯度下降法也很好,这里的少是说小于2000个样本,这样比较适合使用batch...
  • 论文:Self-Distillation from the Last Mini-Batch for Consistency Regularization 地址:https://arxiv.org/pdf/2203.16172.pdf 代码:https://github.com/Meta-knowledge-Lab/DLB 会议:CVPR2022 2. 背景与摘要...
  • Mini-Batch简单实现代码

    2021-03-07 13:52:53
  • mini-batch的定义和用法

    千次阅读 2020-04-28 17:30:36
    最近重新学习神经网络的一些基础知识,顺便对一些知识点做一下梳理,今天说一说在现在神经网络中常看到的一个词叫mini-batch。简单地说,因为梯度更新的时候有三种方式: 第一种是batch gradient descent(批梯度下降...
  • 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 sto...
  • 写论文时需要用到center loss,其用mini-batch取代batch进行更新。知道batch是什么,不清楚mini-batch,故上网查找资料进行学习。 深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。 第一种,...
  • DL优化函数之mini-batch SGD

    千次阅读 2018-09-04 16:10:52
    于是小批量梯度下降法, mini-batch gradient descent 便被提了出来。其主要思想就是每次只拿总训练集的一小部分来训练,比如一共有5000个样本,每次拿100个样本来计算loss,更新参数。50次后...
  • def random_mini_batches(X,Y,mini_batch_size=64,seed=0):"""从(X,Y)中创建一个随机的mini-batch列表参数:X - 输入数据,维度为(输入节点数量,样本的数量)Y - 对应的是X的标签,【1 | 0】(蓝|红),维度为(1,样本...
  • 这种梯度下降法叫做这称为Batch gradient descent(BDG)。我们知道 Batch 梯度下降的做法是,在对训练集执行梯度下降算法时,必须处理整个训练集,然后才能进行下一步梯度下降。当训练数据量非常多时,每更新一次参数...
  • 在梯度下降的三种类型(Batch梯度下降、Mini-batch梯度下降和随机梯度下降)中,我应该使用哪一种呢?在这篇文章中,我们将了解这些概念之间的区别,并从梯度下降的代码实现来阐明这些方法。梯度下降梯度下降是帮助神经...
  • Mini-batch 神经网络训练过程是对所有m个样本,称为batch,如果m很大,例如达到百万数量级,训练速度往往会很慢。 我们可以把m个训练样本分成若干个子集,称为mini-batches,这样每个子集包含的数据量就小了。这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,638
精华内容 16,255
关键字:

Mini-batch