美文网首页大数据人工智能
人工智能00028 深度学习与图像识别书评28 神经网络基础10

人工智能00028 深度学习与图像识别书评28 神经网络基础10

作者: 良友知音 | 来源:发表于2023-12-04 08:18 被阅读0次

    传统的机器学习是针对所有的训练数据来进行训练的,然后针对所有的训练数据来计算损失函数的值,以找出使该值尽可能小的一系列参数。

    换句话说就是,如果训练数据有100万个的话,那么通过传统的方式,我们需要将这100万条数据的损失函数作为之后学习(优化)的指标,如果是这样的话,那对计算机来说,压力也太大了吧。

    Mini-batch是一个一次训练数据集的一小部分,而不是整个训练集的技术。它可以使内存较小、不能同时训练整个数据集的电脑也可以训练模型。

    Mini-batch从运算的角度来说是低效的,因为你不能在所有样本中都计算Loss值。

    但是这点小代价也比根本不能运行模型要划算。其与随机梯度下降(SGD)结合在一起使用时也很有帮助。

    使用方法是在每一代训练之前,都对数据进行随机混洗,然后创建mini-batches,对每一个Mini-batch,都使用梯度下降训练网络权重。

    因为这些batches是随机的,因此你其实是在对每个batch做随机梯度下降(SGD)的操作。 之前的例子中,我们都是拿一条数据来计算损失函数的值,那如果有N条数据呢?

    我们可以通过交叉熵误差公式来做一个改写:    公式虽然复杂了一点,但是简单理解一下,其只是将求单个数据的损失函数扩大到了N份数据之和罢了,最后还需要除以N来得到平均损失函数,用以规避样本数N的影响。

    讲完了概念之后,我们再来看下如何通过Mini-batch技术来实现交叉熵误差(前提是标签已经转为one-hot encoding了)。

    这里的y是实际值,p是神经网络的预测值。实现代码如下:

    def cross_entropy_error(p, y):

       delta = 1e-7

       batch_size = p.shape[0]

       return -np.sum(y * np.log(p + delta)) / batch_size

    相关文章

      网友评论

        本文标题:人工智能00028 深度学习与图像识别书评28 神经网络基础10

        本文链接:https://www.haomeiwen.com/subject/bxilgdtx.html