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

1. 神经网络训练过程

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

y = w 1 x 1 + w 2 x 2 + w 0 z = β ( y ) (1) \tag1 y = w_1x_1+w_2x_2 +w_0 \\ z = \beta(y)

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

2. 损失函数

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

L o s s ( w 1 , w 2 , w 0 ) = (2) \tag2 Loss(w_1,w_2,w_0)=模型预测错误的个数
在这里插入图片描述

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

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

在这里插入图片描述

神经网络模型在训练的时候,是根据Loss函数的变化来判断变化的方向是否正确。上图中,虽然参数发生了变化,但是 L o s s ( w 1 , w 2 , w 0 ) = 0 Loss(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 函数,模型 (1) 变成如下形式:

z = σ ( w 1 x 1 + w 2 x 2 + w 0 ) (3) \tag3 z = \sigma(w_1x_1+w_2x_2 +w_0)

假设训练样本为 ( x 1 i , x 2 i , z i ) , i = 1 , 2 , . . . , N (x_{1i},x_{2i},z_i),i =1,2,...,N ,可以简单地按照如下方式定义损失函数:
L o s s ( w 1 , w 2 , w 0 ) = i = 1 N ( w 1 x 1 i + w 2 x 2 i + w 0 ) z i (4) \tag4 Loss(w_1,w_2,w_0)=\sum_{i=1}^N|(w_1x_{1i}+w_2x_{2i}+w_0)-z_i|

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

发布了174 篇原创文章 · 获赞 80 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/quicmous/article/details/104893570