《Python神经网络编程》读书笔记
作者:[英]塔里克·拉希德(Tariq Rashid)
译者:林赐
出版社:人民邮电出版社
出版时间:2018-04
ISBN:9787115474810
异步社区(www.epubit.com)
第1章 神经网络如何工作
1.4 训练简单的分类器
我们希望训练线性分类器,使其能够正确分类瓢虫或毛虫。在1.3节的图中,根据观察,我们知道要做到这一点,简单说来,就是要调整分界线的斜率,使其能够基于小虫的宽度和长度将两组点划分开来。
我们如何做到这一点呢?
1) 训练线性分类器
我们确实需要一些可以借鉴的实例。为了简单化这项工作,下表显示了两个实例。
2) 训练数据
我们有宽度为3.0和长度为1.0的一只小虫,我们知道这是瓢虫。我们还有长度较长(为3.0)、宽度较小(为1.0)的一只小虫,这是一条毛虫。
我们知道这组实例是正确的。这些实例帮助我们调整分类函数的斜率。用来训练预测器或分类器的真实实例,我们称为训练数据。
3) 训练
- 由于分界线是一条直线,因此我们也可以进行相同的处理:y=Ax
- 让我们观察第一个训练样本数据:宽度为3.0和长度为1.0瓢虫。如果我们使用这个实例测试函数y=Ax,其中x为3.0,我们得到:y=0.25*3.0=0.75
- 在这个函数中,我们将参数A设置为初始随机选择的值0.25,表明对于宽度为3.0的小虫,其长度应为0.75。但是,由于训练数据告诉我们这个长度必须为1.0,因此我们知道这个数字太小了。
- 现在,我们有了一个误差值。我们可以利用这个误差值来搞清楚如何调整参数A。
- 误差值=(期望目标值-实际输出值)
- E=(ΔA)x
- ΔA=E / x这就可以了!这就是我们一直在寻找的神奇表达式。我们可以使用误差值E,将所得到的ΔA作为调整分界线斜率A的量。
- 误差值为0.35, x为3.0。这使得ΔA=E / x=0.35 / 3.0=0.1167。这意味着当前的A=0.25需要加上0.1167。这也意味着,修正后的A值为(A+ΔA),即0.25+0.1167=0.3667。当A=0.3667时,使用这个A值计算得到的y值为1.1,正如你所期望的,这就是我们想要的目标值。
- 唷!我们做到了!我们找到了基于当前的误差值调整参数的方法。
4) 调节系数
ΔA=L(E / x)
调节系数通常被称为学习率(learning rate)。
5) 关键点
- 我们使用简单的数学,理解了线性分类器输出误差值和可调节斜率参数之间的关系。也就是说,我们知道了在何种程度上调整斜率,可以消除输出误差值。
- 使用朴素的调整方法会出现一个问题,即改进后的模型只与最后一次训练样本最匹配,“有效地”忽略了所有以前的训练样本。解决这个问题的一种好方法是使用学习率,调节改进速率,这样单一的训练样本就不能主导整个学习过程。
- 来自真实世界的训练样本可能充满噪声或包含错误。适度更新有助于限制这些错误样本的影响。