本周主要介绍了神经网络中forward和backward的一般实现和向量实现。一般实现较为简单,向量实现中存在一些疑点
X 是一个由训练集组成的矩阵,每一列代表一个数据,列数为数据的大小
ω 是训练参数,大小与
X一列的大小一致
b 为偏差(bias),为一个标量
forward
Z=np.dot(ω.T,X)+b
A=σ(Z),其中
σ(x)=1−e−x1
通过编程实现为
1/(1−np.exp(−X))
Cost Function(Loss Function)通过矩阵实现时应该注意Cost Function是将所有的预测误差相加取平均得到的,不可以直接用矩阵乘法使其变为标量
L=1/m∗np.sum((−Y∗np.log(A)+(1−Y)∗np.log(1−A))),其中m为样本的个数
backward
backward实际上是一个链式求导的过程,backward最根本的式子是通过梯度下降法来更新w和b
∂A∂L=−(AY−1−A1−Y)∂Z∂A=A(1−A)∂ω∂Z=X
所以,我们可以表示
dω 为
dω=np.dot(X,(A−Y).T),这个求解出来为m个样本训练出w的变化总和,因此应该除以m,所以为
dω=1/m∗np.dot(X,(A−Y).T)。
同理可求
db,但是由于b为标量,因此需要对求出的m次训练的b求和,即
db=1/m∗np.sum(A−Y)。根据这两个值即可以更新
ω 和
b