通常,当预测值为连续变量时,损失函数使用平方误差,也就是说,我们尝试通过更改与神经网络相关的权重值来最小化均方误差:
J ( θ ) = 1 m ∑ i = 1 m ( h ( x i ) − y i ) 2 J(\theta)=\frac 1 m \sum _{i=1} m(h(x_i)-y_i)2 J(θ)=m1i=1∑m(h(xi)−yi)2
其中, y i y_i yi 是实际值, h ( x ) h(x) h(x) 是我们对输入 x x x 进行变换以获得预测值 y y y 的网络模型, m m m 是输入数据集中的数据个数。
2.4.2 在分类(离散)变量预测中计算损失
当要预测的变量是离散变量时(也就是说,变量中只有几个类别),我们通常使用分类交叉熵损失函数。当要预测的变量具有两个不同的值时,损失函数为二分类交叉熵,而当要预测的变量具有多个不同的值时,损失函数为多分类交叉熵。
- 二分类交叉熵公式如下:
( y l o g ( p ) + ( 1 − y ) l o g ( 1 − p ) ) (ylog§+(1−y)log(1−p)) (ylog§+(1−y)log(1−p))
- 多分类交叉熵定义如下:
− ∑ i = 1 n y i l o g ( p n ) -\sum _{i=1} ^n y_i log(p_n) −i=1∑nyilog(pn)
其中, y y y 是输入实际对应的真实值, p p p 是输出的预测值, n n n 是数据量的总数。
2.4.3 计算网络损失值
由于我们在以上示例中预测的结果是连续的,因此损失函数值是均方误差,其计算方法如下:
e r r o r = 1.23 5 2 = 1.52 error = 1.235^2 = 1.52 error=1.2352=1.52
2.5 使用 Python 实现网络前向传播
通过以上学习,我们知道了通过在输入数据之上执行以下步骤以在前向传播中可以得出误差值:
-
随机初始化权重
-
通过将输入值乘以权重来计算隐藏层节点值
-
对隐藏层值执行激活
-
将隐藏层值连接到输出层
-
计算平方误差损失
计算所有数据点的平方误差损失值:
import numpy as np
def feed_forward(inputs, outputs, weights):
pre_hidden = np.dot(inputs,weights[0])+ weights[1]
hidden = 1/(1+np.e