欢迎光临散文网 会员登陆 & 注册

《Python神经网络编程》阅读笔记2

2021-06-22 16:42 作者:此夜亭落英  | 我要投稿

1.1 尺有所短,寸有所长

我们会发现计算机在一些算数上表现优异,这是因为计算机内部的数字电路在系统时钟下可以快速地做布尔运算,简单抽象地说,如果有一个算盘,计算机可以以极快地速度打这个算盘。

但假如说涉及到图像识别时,计算机在识别图片中的内容时并没有那么容易。

人类和计算机在不同的任务上表现各异

1.2 一台简单的预测机

书中给的例子是千米转换成英里的一个任务。

计算机需要做的就是计算“英里=千米×C”。

但是这个C我们不知道(我还真不知道……)

但是现在假设我们有了一个训练集(集里包含了若干组正确的英里、千米换算关系)。

然后我们让计算机随机选择一个C,计算一下,并再计算一下和正确答案的误差。

接着修改C,看误差是否变小,如果变小就选择新的C。

假如我们选择了合适的修正算法,对于这个问题,训练集里只需要一个训练数据就可以把C修正到理论的C。

这种方法叫迭代,特点是持续地、一点点的改进答案/算法

1.3 分类器与预测器并无太大差别

书中给的例子是花园里小虫子的分类。

测量了虫子的宽度和长度,并且以这两个参数为坐标,绘制平面散点图。

不同虫子的特征不同,就会在图上聚集在不同的区域。

例子中用直线试图将两种虫子完全分开在直线的两侧。

如果分开了,这个直线就是一个可用的尺子(ruler,这里指规则的意思)。

如果没分开,就修改直线的参数(这里主要是斜率)。

而且我们可以不断增加训练集,不断使得这个尺子优化(就是有新的训练数据不满足尺子时,就修改尺子)。

个人理解:

与其说是检查两个参数(用平面图的点表示),不如说是依次检测两个参数,给定毛虫的长度范围、宽度范围,瓢虫的长度范围、宽度范围,这样得到两个矩形尺子,这个比直线尺子性能肯定要好。如果规定某个长度的虫子有独特的宽度范围(之前是规定某个虫子有独特的宽度范围),就可以换任意形状的平面区域尺子(它甚至可以不是封闭的,尽管在这个虫子分类问题上它应当是封闭的)。

1.4 训练简单的分类器

上一节里介绍了分类器,这一节介绍如何训练分类器。

上一个例子种的分类器的尺子可以用y=Ax来刻画(y为长度,x为宽度)。

先随便设置一个A=0.25,根据某个训练数据就会得到一个误差。比方说一个(3,1)的瓢虫。计算值是(3,0 .75),由于我们不是预测器,而是分类,我们希望计算值在实际值的上面,所以计算值的期望是( 3,1.1),那么误差就是1.1-0.75=+0.35。要减小正误差需要增大A。这个A的增值ΔA甚至可以精确计算为E/x(即0.35/3)。

于是我们得到新的尺子y=0.3667x。

这个尺子的图像是很贴近样本的点的,这表明训练样本少时,分类器会表现地更像预测器。

如果在A=0.3667的基础上拿(1,3)训练,会得到一个新的A,但根据我们的算法,实际上,在A=0.25的基础上拿(1,3)训练也会得到同样的A。这其实意味着,最终改进的尺子不会顾及先前所有的训练样本而只学习最近的一个实例。

这个的解决办法之一是使用适度改进,不要用精确的ΔA来满足最新的实例,比方说取ΔA=0.5(E/x),这样就可以适度地改进尺子。

而且真实世界的训练样本也可能具有误差,适度地改进也有助于限制错误样本对尺子的影响。

以上,就是非常简单的自动化的学习方法。

《Python神经网络编程》阅读笔记2的评论 (共 条)

分享到微博请遵守国家法律