python神经网络编程epub下载_权重


书籍目录

  • 第一章 神经网络如何工作
  • 第二章 使用Python进行DIY
  • 第三章 趣味盎然




第一章 神经网络如何工作

计算机非常擅长快速计算,但不擅长识别图片内容。人恰恰相反。
人脑的流程:问题——》思考——》答案
机器的流程:输入——》计算——》输出

预测器:接受输入并作出预测,给出结果。(调整内部参数让模型更加精确)
分类器:决策边界7使得不同元素分开。(线性分类器调整斜率更加精确)

我们不能精确制导一些事情如何运作,尝试使用模型来估计其运作方式,在模型中包括了我们可以调整的参数。
要改进这些模型,一个好办法是基于模型和已知真实案例直接进行比较得到模型偏移的误差值E
分类器通过使用调节系数/学习率L改进调节速率,适度更新。

线性分类器的确可以学习布尔OR函数,但是当面临XOR时(两个输入不同时为真,相同为假)无能为力。**线性分类器的主要限制,如果不能用一条直线把根本的问题划分开,简单的线性分类器没有用。**解决可以用多个分类器。

分析一下人类的神经细胞,只有到达一定阈值才会产生输出信号,研究员经常用S函数/逻辑函数制作神经网络。基本S型函数为y=1/(1+e-x),如下图所示。

python神经网络编程epub下载_权重_02


自然形式复制到人工制造就成了多层神经网络。随着学习过程进行,神经网络通过调整优化网络内部的 链接权重wab 改进输入输出。一开始科技将链接权重设置成随机初始值。

python神经网络编程epub下载_机器学习_03

当一个有很多层众多节点的神经网络会给手动输入带来大麻烦,我们可以使用矩阵。可以使用X=W*I简洁表示。调节后的信号X = 权重矩阵W * 输入矩阵I点乘要求第一个矩阵的列等于第二个矩阵的行。
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。先将之前的输入数据按权重进行累加,再调用激活函数。最终的输出是 O=sigmoid(X) 矩阵O包含了神经网络的最后一层中的所有输出。

-通过神经网络向前馈送信号所需要的大量运算可以表示为矩阵乘法。
-不管神经网络的规模如何,将输入输出表达为矩阵乘法,使得我们可以更简洁地进行书写
-一些编程语言理解矩阵计算可以更加高效计算

不管有多少层神经网络,都一视同仁,组合6信号,应用链接权重调节输入信号,应用激活函数,生成输出信号。将神经网络中的输出值与训练样本中的输出值进行比较,计算出误差,需要使用这个误差值来调节神经网络本身,进而改进神经网络的输出值。

使用权重,将误差向后传播进网络中,这个叫做反向传播
将误差标记为e,e误差=(t训练集提供的期望输出值-o实际输出值) 按照链接权重的比例来分割输出层的误差,然后在每个内部节点重组这些误差。==error widden 隐藏误差=WT(权重的转置)*erroroutput(输出的误差)

反向传播可以表示为矩阵乘法。
向前馈送信号和反向传播都可以使用矩阵计算而变得高效。

实际上我们是如何更新权重的呢?——梯度下降法

我们需要采用合适的步长,避免超调。正梯度减小x值,负梯度增加x值。

python神经网络编程epub下载_神经网络_04


实际上函数有许多的参数,以二维平面做类比,要找到山谷中最低的位置,事实上并不是每次都能找到,所以要从山顶多次训练保证不是陷入了错误的位置。

python神经网络编程epub下载_神经网络_05

梯度下降是求解函数最小值的一种很好的方法,当函数非常复杂困难的时候,这种方法发挥了很好的作用。
尤其是函数有很多参数的时候,很多方法会求解错误,这种方法有很好的结果
这种方法有弹性,可以容忍错误,不能完美描述函数时错了一步也不会错得离谱。

关于误差函数,一般使用(目标值-实际值)2 而不采用绝对值,有以下几点好处

  • 使用误差的平方,很容易使用代数计算计算出梯度下降的斜率(下面的公式推导用到)
  • 误差函数平滑连续,这使得梯度下降法很好地发挥作用—没有间断,也没有突然的跳跃。
  • 越接近最小值,梯度越小,这意味着,如果我们使用这个函数调节步长,超调的风险就会变得较小

引用知乎:使用平方形式的时候,使用的是“最小二乘法”的思想,这里的“二乘”指的是用平方来度量观测点与估计点的距离(远近),“最小”指的是参数值要保证各个观测点与估计点的距离的平方和达到最小。最小二乘法以估计值与观测值的平方和作为损失函数,在误差服从正态分布的前提下,与极大似然估计的思想在本质上是相同。而最终还是要求导的,平方形式求导会容易多,简单效果也不错

在寻找误差最小这个梯度下降过程中,斜率是E误差/wij网络链接权重
然后是一系列眼花缭乱的公式推导,略

new wij=oldWij-α*E的偏导/wij的偏导
α一般称之为学习率

神经网络的误差是内部链接权重的函数
改进神经网络,意味着通过改变权重减少这种误差
很难直接就找到合适的权重,所以需要梯度下降。
使用微积分很容易计算出误差斜率

一些使得神经网络更容易成功的建议:
调整输入值在(0,1]范围内,避免学习能力的丧失
目标值也不能超出激活函数的范围,在(0,1)之间
随机初始权重在一个节点传入连接数量平方根倒数的大致范围内随机采样,初始化权重。例如三条就取(-1/根号3,1/根号3),总之不要相同或者为0

第二章 使用Python进行DIY

环境配置:安装Anaconda,使用py3+的版本,使用NoteBook。
这章主要是练习了。无笔记。