Python神经网络编程学习记录(一)

Python神经网络编程学习记录(一)

总结:共三章。两个附录。第1章介绍了神经网络中所用到的数学思想。第2章介绍使用Python实现神经网络,识别手写数字,并测试神经网络的性能。第3章带领读者进一步了解简单的神经网络,观察已受训练的神经网络内部,尝试进一步改善神经网络的性能,并加深对相关知识的理解。附录分别介绍了所需的微积分知识和树莓派知识。

神经网络是一种,模拟人脑的神经网络,实现一些类人工智能的功能的机器学习技术。最开始人类就探索让机器从机械化工作到从事一些智能工作,这本书用识别人类手写数字来举例。

第一章 神经网络如何工作

1.1 尺有所短,寸有所长,计算机计算很快,人类识别面孔快。
1.2 一台简单的预测机,人类,问题,思考,答案;机器:输入,计算,输出。神经网络中学习的核心过程。我们训练机器,使其输出值越来越接近正确的答案。
1.3 分类器与预测器并无太大差别,可以区分毛毛虫和瓢虫。
1.4 训练简单的分类器,训练数据,我们希望能够找到一种可重
复的方法,也就是用一系列的计算机指令来达到这个目标。计算机科学家称这一系列指令为算法(algorithm)。误差值E与ΔA存在着一种简单的关系E = (ΔA)x实际上,最终改进的直线不会顾及所有先前的训练样本,而是抛弃了所有先前训练样本的学习结果,只是对最近的一个实例进行了学习。我们应该进行适度改进(moderate)。也就是说,我们不要使改进过于激烈。我们采用ΔA几分之一的一个变化值,而不是采用整个ΔA,充满激情地跳跃到每一个新的A值。在改进公式中,我们
将添加一个调节系数:ΔA= L(E / x )调节系数通常被称为学习率(learning rate),
感想:作者用线性函数做一个分类器。用第一个样本训练,得到误差,更新A,带入第二个样本,得到误差,更新A,发现了问题,模型没记住之前得训练结果,因此要缓慢更新。
1.5 有时候一个分类器不足以求解问题。(线性分类器有局限性)线性分类器确实可以学到布尔AND函数。也可以学习到布尔OR函数。如果出现的是由XOR函数支配的训练数据,那么一个简单的线性分类器无法学习到布尔XOR函数。在一些任务中,根本性问题不是线性可分的,也就是说单一的一条直线于事无补,而我们希望神经网络能够解决此类的任务。但是解决方案很容易,你只需要使用多个线性分类器来划分由单一直线无法分离的数据。
1.6 神经元——大自然的计算机器。虽然这个函数接受了输入信号,产生了输出信号,但是我们要将某种称为激活函数的阈值考虑在内。将这种自然形式复制到人造模型的一种方法是,构建多层神经元,每一层中的神经元都与在其前后层的神经元互相连接。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这意味着,随着神经网络学习过程
的进行,神经网络通过调整优化网络内部的链接权重改进输出,一些权重
可能会变为零或接近于零。零或几乎为零的权重意味着这些链接对网络的
贡献为零,因为没有传递信号。零权重意味着信号乘以零,结果得到零,
因此这个链接实际上是被断开了。
感想:神经元不是简单的输入就有输出,它存在一个激活函数。这样可以有效过滤噪声
1.7 在神经网络中追踪信号。每个神经元都与其前后层的每个神经元相互连接的三层神经元图片,
看起来让人相当惊奇。但是,计算信号如何经过一层一层的神经元,从输入变成输出,因此,我们尝试使用只有两层、每层两个神经元的较小的神经网络,来演示神经网络如何工作
在这里插入图片描述
在这里插入图片描述
第一层节点是输入层,这一层不做其他事情,仅表示输入信号。也就是说,输入节点不对输入值应用激活函数。
接下来的第二层,我们需要做一些计算。对于这一层的每个节点,我们需要算出组合输入。还记得S函数y = 1 /(1 + e-x )吗?这个函数中的x表示一个节点的组合输入。此处组合的是所连接的前一层中的原始输出,但是这些输出得到了链接权重的调节。权重是神经网络进行学习的内容,这些权重持续进行优化,得到越来越好的结果。
图中是很简单的可以通过手工计算的神经网络
1.8 凭心而论,矩阵乘法大有用途。讲了矩阵的乘法运算规则。为了能够进行矩阵相乘,第一个矩
阵中的列数目应该等于第二个矩阵中的行数目。我们可以使用矩阵乘法表示所有计算,计算出组合调
节后的信号x ,输入到第二层的节点中。X = W •I此处,W 是权重矩阵,I 是输入矩阵,X 是组合调节后的信号,即输入到第二层的结果矩阵。激活函数只是简单地应用阈值,使反应变得更像是在生物神
经元中观察到的行为。因此,来自第二层的最终输出是:O = sigmoid ( X )斜体的O 代表矩阵,这个矩阵包含了来自神经网络的最后一层中的所有输出。
用矩阵乘法来计算权重更新后的x更有利于使用计算机进行大规模计算
1.9 使用矩阵乘法的三层神经网络示例。
在这里插入图片描述
输入层所做的所有事情,就是表示输入。
隐藏层我们需要计算出输入到中间层每个节点的组合(调节)信号。请记住,中间隐藏层的每个节点都与输入层的每个节点相连,因此每个节点都得到输入信号的部分信息。输入到中间层的组合调节信号为X = W •I ,其中I 为输入信号矩阵,W 为权重矩阵。W input_hidden 是输入层和隐藏层之间的权重。我们需要另一个权重矩阵来表示隐藏层和输出层之间的链接,这个矩阵我们称之为W hidden_output 。
在这里插入图片描述
不管有多少层神经网络,我们都“一视同仁”,即组合输入信号,应用链接权重调节这些输入信号,应用激活函数,生成这些层的输出信号。将神经网络的输出值与训练样本中的输出值进行比较,计算
出误差。我们需要使用这个误差值来调整神经网络本身,进而改进神经网络的输出值。
在这里插入图片描述
1.10 学习来自多个节点的权重。当输出和误差是多个节点共同作用的结果时,我们如何更新链接权重
呢?下图详细阐释了这个问题。
在这里插入图片描述
一种思想就是在所有造成误差的节点中平分误差,另一种思想是不等分误差。与前一种思想相反,我们为较大链接权重的连接分配更多的误差。为什么这样做呢?这是因为这些链接对造成误差的贡献较大。
我们在两件事情上使用了权重。第一件事情,在神经网络中,我们使用权重,将信号从输入向前传播到输出层。此前,我们就是在大量地做这个工作。第二件事情,我们使用权重,将误差从输出向后传播到网络中。我们称这种方法为反向传播。
1.11 多个输出节点反向传播误差。我们知道需要使用误差来指导在网络内部如何调整一些参数,在这里也就是链接权重。我们明白了如何调整链接权重,并且我们使用链接权重来调节进入神经网络最终输出层的信号。在存在多个输出节点的情况下,我们也看到了这种调整过程没有变得复杂,只是对每个输出节点都进行相同的操作。接下来我们要问的问题是,当神经网络多于2层时,会发生什么事情
呢?在离最终输出层相对较远的层中,我们如何更新链接权重呢。
1.12 反向传播误差到更多层中。
1.13 使用矩阵乘法进行反向传播误差。反向传播误差可以表示为矩阵乘法。无论网络规模大小,这使我们能够简洁地表达反向传播误差,同时也允许理解矩阵计算的计算机语言更高效、更快速地完成工作。这意味着前向馈送信号和反向传播误差都可以使用矩阵计算而变得高效。
原来神经网络中矩阵的转置是这么来的!
1.14 我们实际上如何更新权重。能够表示所有的权重如何生成神经网络输出的数学表达式过于复杂,
难以求解。太多的权重组合,我们难以逐个测试,以找到一种最好的组合。
梯度下降(gradient descent)在你迈出一步之后,再次观察周围的地形,看看你下一步往哪个方向走,才能更接近目标,然后,你就往那个方向走出一步。你一直保持这种方式,直到非常欣喜地到达了山底。梯度是指地面的坡度。你走的方向是最陡的坡度向下的方向。梯度下降法给我们带来一种能力,即我们不必完全理解复杂的函数,从数学上对函数进行求解,就可以找到最小值。我们感兴趣的是,误差函数是如何依赖于神经网络中的链接权重的。神经网络的误差是内部链接权重的函数。
改进神经网络,意味着通过改变权重减少这种误差。直接选择合适的权重太难了。另一种方法是,通过误差函数的梯度下降,采取小步长,迭代地改进权重。所迈出的每一步的方向都是在当前位置向下斜率最大的方向,这就是所谓的梯度下降。使用微积分可以很容易地计算出误差斜率。
1.15 权重更新成功范例???
1.16 准备数据。如果输入、输出和初始权重数据的准备与网络设计和实际求解的问题不匹配,那么神经网络并不能很好地工作。一个常见的问题是饱和。在这个时候,大信号(这有时候是由大权重带来的)导致了应用在信号上的激活函数的斜率变得非常平缓。这降低了神经网络学习到更好权重的能力。另一个问题是零值信号或零值权重。这也可以使网络丧失学习更好权重的能力。内部链接的权重应该是随机的,值较小,但要避免零值。如果节点的传入链接较多,有一些人会使用相对复杂的规则,如减小这些权重的大小。输入应该调整到较小值,但不能为零。一个常见的范围为0.01~0.99,或-1.0~1.0,使用哪个范围,取决于是否匹配了问题。输出应该在激活函数能够生成的值的范围内。逻辑S函数是不可能生成小于等于0或大于等于1的值。将训练目标值设置在有效的范围之外,将会驱使产生越来越大的权重,导致网络饱和。一个合适的范围为0.01~0.99

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值