1. 神经网络训练过程

我们分析一下下面这个简单的模型:

y=w1x1+w2x2+w0z=β(y)(1)\tag1 y = w_1x_1+w_2x_2 +w_0 \\ z = \beta(y)

需要依据训练样本,确定参数 w1,w2,w0w_1,w_2,w_0 的值。如何确定使模型与训练样本尽量匹配?一般借助损失函数来解决这个问题。

2. 损失函数

最简单的想法是,用模型预测训练样本,用预测错误的次数作为损失函数的结果:

Loss(w1,w2,w0)=(2)\tag2 Loss(w_1,w_2,w_0)=模型预测错误的个数
小议神经网络训练与Sigmoid 函数

接下来,只需要让 w1,w2,w0w_1,w_2,w_0 朝着损失函数降低的方向变化就行了。如上图,分界线逐步移动到Loss(w1,w2,w0)=0Loss(w_1,w_2,w_0) = 0 的位置。

说起来容易,实际做起来问题还不少。参考下图:

小议神经网络训练与Sigmoid 函数

神经网络模型在训练的时候,是根据Loss函数的变化来判断变化的方向是否正确。上图中,虽然参数发生了变化,但是 Loss(w1,w2,w0)=0Loss(w_1,w_2,w_0) = 0 却没发生变化。导致这个结果的原因是**函数 β()\beta(*) 的定义,β(0.01)\beta(0.01)β(10000)\beta(10000) 的值完全相同,因此,它无法区分 0.01 和 10000 谁离分界线更远一些、谁离分界线更近一些。这导致分界线在小幅度变化过程中,**函数 β()\beta(*) 无法给出提示。就像学生考试一样,第一次考了61分,改变学习方法后,第二次考了75分。如果这两个成绩反映在成绩单上都是“及格”,因此,我们就不知道新的学习方法是否有效。因此,我们需要一种更好的**函数,以便反映出模型细微进步或退步,使得参数能朝着正确方向逐步调整。

3. Sigmoid 函数

下面就是著名的 Sigmoid 函数,当自变量 x 很小的时候,它的值接近0,当 x 逐渐增大的时候,它的值逐渐接近1。因为它是个严格递增函数,因此,无论 x 在那个区间内变化,Sigmoid 函数都能随之展现出变化。
小议神经网络训练与Sigmoid 函数

把**函数更换成 Sigmoid 函数,模型 (1) 变成如下形式:

z=σ(w1x1+w2x2+w0)(3)\tag3 z = \sigma(w_1x_1+w_2x_2 +w_0)

假设训练样本为 (x1i,x2i,zi),i=1,2,...,N(x_{1i},x_{2i},z_i),i =1,2,...,N,可以简单地按照如下方式定义损失函数:
Loss(w1,w2,w0)=i=1N(w1x1i+w2x2i+w0)zi(4)\tag4 Loss(w_1,w_2,w_0)=\sum_{i=1}^N|(w_1x_{1i}+w_2x_{2i}+w_0)-z_i|

当然,简单的未必好用,回头我们将进一步讨论如何科学地设计损失函数。

相关文章:

  • 2021-06-18
  • 2021-11-23
  • 2021-11-30
  • 2021-06-21
  • 2022-02-08
  • 2021-11-25
猜你喜欢
  • 2021-05-18
  • 2021-08-19
  • 2021-05-25
  • 2021-06-02
  • 2021-05-27
  • 2021-07-20
  • 2021-04-20
相关资源
相似解决方案