SGD

 

                  Stochastic Gradient Descent

 

 

 

原理

C: cost

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)

  1. TypeError: object of type 'zip' has no len()

→print(len(training_data))  改为print(list(training_data))

(4)尽量用python3的代码,别用python2了

 

 

优点

随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。

批量梯度下降每次学习都使用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。

缺点

在于每次更新可能并不会按照正确的方向进行,因此可以带来优化波动(扰动)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值