Stochastic Gradient Descent | |
原理 |
w: weight 权重 b: bias 偏向 n: 训练数据集实例个数 x: 输入值 a: 输出值 (当x是输入时) ||v||: 向量的length function C(w,b) 越小越好,输出的预测值和真实值差别越小 目标: 最小化C(w,b) 最小化问题可以用梯度下降解决(gradient descent) |
过程 |
写个demo.py 分别调用 mnist_loader.py(下载数据集的)与network.py(随机梯度下降网络的训练)
|
调试 |
(1)IndexError: list index out of range 情况一: index下标越界 情况二: list本身为空 这两种情况都不属于,改成矩阵输出就好了 print(list(training_data)[0][0].shape) →a = np.asarray(list(training_data)) print(a.shape) (2)但是用了上面这种写法,就无法对下面神经网络进行更新了 net = network.Network([784,30,10]) net.SGD(training_data,30,10,3.0,test_data=test_data)
→print(len(training_data)) 改为print(list(training_data)) (4)尽量用python3的代码,别用python2了 |
优点 |
随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。 (批量梯度下降每次学习都使用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。) |
缺点 |
在于每次更新可能并不会按照正确的方向进行,因此可以带来优化波动(扰动) |