YB菜菜的机器学习自学之路(四)——简单了解空间梯度下降和初步的神经单元
前提说明
在先前过程中,定义预测函数为
y
=
w
x
y=wx
y=wx,其代价函数是一个一元二次的抛物线。在进行寻找最优解的过程中对这个曲线进行梯度下降。但是
y
=
w
x
y=wx
y=wx限制的预测函数,即,认为曲线必须经过原点。
因此,为了一般情况,应该定于预测函数为
y
=
w
x
+
b
y=wx+b
y=wx+b.
在这种情况下,代价函数为:
e
=
(
y
−
(
w
x
+
b
)
)
2
=
x
2
w
2
+
(
2
x
b
−
2
x
y
)
w
+
(
y
2
+
b
2
−
2
y
b
)
e=(y-(wx+b))^{2}=x^{2}w^{2}+(2xb-2xy)w+(y^{2}+b^{2}-2yb)
e=(y−(wx+b))2=x2w2+(2xb−2xy)w+(y2+b2−2yb)
=
b
2
+
(
2
x
w
−
2
y
)
b
+
(
x
2
w
2
+
y
2
−
2
x
y
w
)
(
1
)
=b^{2}+(2xw-2y)b+(x^{2}w^{2}+y^{2}-2xyw) (1)
=b2+(2xw−2y)b+(x2w2+y2−2xyw)(1)
1.代价函数求解
1.1 代价函数曲面图
由公式(1)可以看出,此时代价函数由
w
w
w和
b
b
b两个参数确定。呈现在在坐标系中的图形由原来的平面曲线,变成曲面。如图1所示。
图1 代价函数
1.2 梯度下降(偏导-联合)
图2
如图2,左侧为平面曲线情况,此时为了寻找顶点,我们只需要沿着
w
w
w的方向进行寻找。
当代价函数是曲面时,顶点不再仅受某一个参数影响。事实上,由图1可知,当
w
w
w是一个固定值时,以
b
b
b为自变量的的顶点并不是整个曲面的最顶点,反之亦然。
因此:真正的寻找方向应该是w和b下降方向的合(如图2右侧所示)。这个合方向可以用对
w
w
w和对
b
b
b参数的偏导获得:
d
w
=
2
x
2
w
+
(
2
x
b
−
2
x
y
)
(
2
)
dw = 2x^{2}w+(2xb-2xy) (2)
dw=2x2w+(2xb−2xy)(2)
d
b
=
2
b
+
(
2
x
w
−
2
y
)
(
3
)
db = 2b+(2xw-2y) (3)
db=2b+(2xw−2y)(3)
我们依然可以用随机梯度下降或者批量梯度下降进行求解。以批量梯度下降为例:
w_batch = 0.1
b_batch = 0.1
for _ in range(100):
for _ in range(100):
# e=(y-(wx+b))**2=x^2*w^2+(2xb-2yx)w+(y^2+b^2-2yb)
alpha_batch=0.1
dw = (2*np.sum(xs*xs)*w_batch+np.sum(2*xs)*b_batch-np.sum(2*ys*xs))/m
db = (2*m*b_batch+(np.sum(2*xs)*w_batch-np.sum(2*ys)))/m
w_batch = w_batch - alpha_batch * dw
b_batch = b_batch - alpha_batch * db
plt.clf()
plt.scatter(xs, ys)
ypre = w_batch*xs + b_batch
plt.title("batch", fontsize=12)
plt.xlim(0, 1)
plt.ylim(0, 1.2)
plt.plot(xs, ypre)
plt.pause(0.01)
plt.show()
图3 预测函数拟合结果
2.初步了解神经网络模型
图4:单神经元模型
如图4,在整个过程中,我们用预测函数模型(一元一次函数
y
=
w
x
+
b
y=wx+b
y=wx+b)来模拟神经元,而把我们统计观测而来的数据送入预测函数进行预测的过程称为前向传播。
数据通过一次前向传播就会得到一个预测值,预测值与统计观测而来的真实值之间存在误差,我们用平方误差作为评估手段。而这个误差函数,我们称为代价函数
e
e
e,而使用的方法为方差,因此称为方差代价函数。
而用这个代价函数去修正预测函数模型,我们称为反向传播。
在这个反向传播过程中我们采用梯度下降的方法来修正参数,其中
α
\alpha
α为学习率,其影响学习的效率,不能太大也不能太小。
训练:在这个不断经历前向过程和方向过程最终达到代价函数最低点,我们称为训练或者学习。
从整体上看,这就称为一个简单的机器学习中的神经网络(这里只有一个神经元,因此又叫单神经元模型)。
随着神经元的增加,就可以形成神经网络。