标准梯度下降将为整个训练数据集计算梯度。 for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad 对于预定义的时期数,我们首先使用参数向量参数为整个数据集计算损失函数的梯度向量weights_grad。 相反,随机梯度下降为每个训练示例x(i)和标签y(i)执行参数更新。 for i in range(nb_epochs): np.random.shuffle(data) for example in data: params_grad = evaluate_gradient(loss_function, example, params) params = params - learning_rate * params_grad SGD据说要快得多。但是,我不明白如果仍然对所有数据点进行循环,那么如何更快。GD中梯度的计算是否比分别为每个数据点计算GD慢得多? 代码来自这里。
作为我神经网络甚至无法学习欧几里德距离的后续操作,我进一步简化了方法,并尝试将单个ReLU(具有随机权重)训练为单个ReLU。这是目前最简单的网络,但有一半时间未能融合。 如果初始猜测与目标的方位相同,则它会快速学习并收敛到正确的权重1: 如果最初的猜测是“向后”,则它的权重为零,并且永远不会经过它到达较低损失的区域: 我不明白为什么。梯度下降不应该轻易遵循损耗曲线达到全局最小值吗? 示例代码: from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, ReLU from tensorflow import keras import numpy as np import matplotlib.pyplot as plt batch = 1000 def tests(): while True: test = np.random.randn(batch) # Generate ReLU test case X = test Y = test.copy() Y[Y < 0] …