随机梯度下降算法
给的参数格式为(这里用numpy数组格式)
[[x11, x12, x13, ..., x1n], [[y1],
[x21, x22, x23, ..., x2n], [y2],
... ...
[xn1, xn2, xn3, ... , xnn]] [yn]]
给出python代码先, 下面会给出原理分析
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
if test_data: n_test = len(test_data)
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1} / {2}".format(
j, self.evaluate(test_data), n_test)
else:
print "Epoch {0} complete".format(j)
1.设计估计函数
这里假设是多元线性函数,x代表的是特征分量 , θ为变量
估计函数
2.计算损失函数J(θ)&偏导
损失函数J(θ)接下来对损失函数进行求导,由于SGD每次只取一组变量,不用考虑外层的sigma求和,θ的偏导
θ偏导函数
3.根据偏导循环更新θi
这里的α指的是步长,虽然步长一致,但是由于机器学习根据梯度下降的算法基本都是凸函数所以越接近损失函数的最小值每一步走的距离会越来越小,最后两步走的距离接近设定阈值(比如0.0001),算法可认为已经完成了
更新θi
网友评论