• 上一章用Softmax对手写图片分类
    • 准确率92%
  • 这只用第1章刚开始的图1.2中最右侧节点的部分
  • 本章添加前面全连接层调用的那些节点群(见图3.1)
  • 对二维平面数据为例,来确认全连接层功能
    • 然后在此基础上再次对手写数字分类

  • 用Tensorflow自带的可视化工具TensorBoard对神经网络的构造
  • 及参数变化进行图形化显示

3 用NN分类

3.1单层神经网络的的构成

  • 本节对只添加了一个全连接层的“单层神经网络”的构成详细介绍。
  • 以针对二维平面数据分类的二元分类器为例,进行具体实践和验
    证确认。
  • 这里用到还是在1.1.2节“神经网络的必要性”中介绍过的,
    • 针对某次检査结果(x1,x2)(x_1,x_2)
    • 计算出其被病毒感染的概率P

3.1.1 用单层神经网络的二元分类

  • 把单层神经网络模型化,会用到图3.2的形式
  • 分为输入层、隐藏层和输出层三个组成部分,
  • 隐藏层中会把输入数据代入到一次函数中计算并通过“**函数”转换后输出

3 用NN分类

  • 隐藏层中全部M个节点分别输出后的结果可以通过如下得到。
  • **函数h(x)h(x)以后说

3 用NN分类

  • 最后的输出层,这些值会代入一次函数中计算并通过Sigmoid转
  • 为0~1的概率

3 用NN分类

  • 这里的一次函数的参数(系数和常数)与之前我们讲到的稍有不同。
  • (3.2)本质与2.1.1“用概率进行误差评价”的公式(2.1)和公式(2.3)完全相同
  • 本来由这两个值决定的数据(x1,x2),通过隐藏层处理后,扩展成了由M个值组成的数据(z1,…,2)。

  • 1.1.2节“神经网络的必要性”的图1.9,
    • 像这样包括最后输出层的NN,称“由两层节点组成的神经网络”。
  • 输入层和输出层是定要有,这里只注意隐藏层数,
    • 所以图3.2称“单层NN
  • 3.3节“扩展为多层神经网络”讲两个隐藏层重叠,称“两层NN”

3 用NN分类

  • 如图1.9,隐藏层的**函数使用了与输出层相同的Sigmoid
  • **函数σ(x)\sigma(x)会以x=0为边界从0~1变化的函数,
    • 这就可模拟组成人脑的神经细胞中“神经元”的反应模式。
  • 隐藏层输出时调用Sigmoid,就可以模拟随着输入信号变化来**神经元,并同时输出0和1信号

  • 机器学习模型也并不一定要完全模拟现实中的神经元,只要有相应的输出值与输入值相对应就可以了。
  • 实际中,除了Sigmoid外,还有双曲正切函数 tanh x和ReLU( Rectified Linear Unit,线性整流函数)等函数可用
  • 各**函数所表示的图形的纵轴取值范围是不相同的

3 用NN分类

3 用NN分类

  • 最初,Sigmoid只是因为可以对应神经元的实际操作所以被广泛采用。
  • 后来发现如果**函数通过原点能够获得更好的计算效率,所以双曲正切函数也渐渐被使用

  • 近来深度学习采用了多层神经网络,ReLU则可更加快速地优化参数。
  • Sigmoid**函数和双曲正切函数都是随着x增大,输出值会向一个定值递增,曲线的倾斜度也逐渐趋于0。
  • 计算误差函数的梯度时,如果**函数的倾斜度越小,梯度值就会随之越小,进而参数优化的计算处理就会变得越困难。

  • 双曲正切函数的理论分析易理解,本章就用它来示例
  • 后面说明如果把**函数换成ReLU后会有什么效果
  • 3.2节“应用单层神经网络手写数字分类”对手写数字进行分类处
    理时,会按照一般深度学习的惯用做法,用ReLU作为**函数。

3.1.2隐藏层的作用

  • 有两个节点的隐藏层如图3.4。
  • 这时隐藏层有21和2两个输出值,如下为它们的定义

3 用NN分类

3 用NN分类

  • 这与2.1.1节的图2.3的Sigmoid**函数计算概率的算式相似
  • 双曲正切**函数的参数部分是关于(x,x2)的一次函数,对应把平面(x1,x2)用直线分割的操作。
  • 且在分割线的两侧,**函数的值是从-1~1线性变化

  • tanh x的值在x=0的两侧急剧变化。
  • 21和z2的值沿分割线从-1~1急剧变化。
  • 这里平面(x1,x2)上基于各点的21和2值,可用图3.5表示。
  • 平面(x1,x2)被两根直线分割成了4个区域
  • ①~④的每个区域的x1和2值都对应表3.1所列的取值范围

3 用NN分类

3 用NN分类

  • 把最后取到的(2,2)值代入输出层的Sigmoid后,就可算出对应的概率值P,具体算式如下

3 用NN分类

  • (z1,z2)(z_1,z_2)就是图3.5的4个区域最终取到的值,
  • P(21,2)对应属于每个区域时的概率
  • 如果没隐藏层、只有输出层的逻辑回归,
    • 与2.1.2“通过 tensorflow执行最大似然估计”的图2.9
  • 平面(x,x2)可以被直线分割成两区域
  • 这里可看作是把分割领域扩张成为4区域

  • Chapter3/ Single layer network example
    ipynb”。
  • 这些代码是为了再现图3.5那样的图形而写,并不最优
  • 仅作为对于图3.4所示的单层神经网络

  • 01导入模块,定义随机数种子

3 用NN分类

  • 8~9行设定了随机数种子,
  • 第8行Numpy模块中的随机数生成种子进行设定的,
  • 第9行则是对 Tensorflow模块中的随机数生成种子设定。
  • 训练集数据的生成还是会使用 Numpy提供的随机数,
  • 神经网络参数初始值即一次函数系数的设定,
    • 用Tensorflow的随机数生成功能

  • 02用随机数生成训练集数据

3 用NN分类

  • 平面(x,x2)像图3.5那样分成4区,分别为每个区域设置数据。
  • 右上侧区域设置为t=1的数据,其他区域设置为t=0的数据。
  • 与2.1.2节“通过 ensorflow执行最大似然估计”的[MLE-02]大致
    相同的。

  • 03接下来把(x1,x2)和中所保存的数据用纵向矩阵的形式全部取出来

3 用NN分类

3 用NN分类

  • 04接下实现图3.4的神经网络。
  • 隐藏层的值(z1,z2)(z_1,z2)用矩阵的形式计算可以用如下算式表示

3 用NN分类

  • Z表示在第nn个数据(x1n,x2n)(x1n,x2n)所对应的值(z1n,2)排列而成的矩阵,
  • W1W_1b1b_1表示一次函数系数和常数项排列而成的矩阵

3 用NN分类

  • 公式(3.9)中用到的运算符\oplus与2.3.2节“图片数据的分类算法”的公式(2.29)相同,都适用 Broadcasting机制的加法运算,
  • 如果对象为函数时也会适用针对函数的 Broadcasting机制

3.2 应用单层神经网络进行手写数字分类

  • 上节解決二维平面数据分类的二元分类器为例,
  • 帮助我们理解单层神经网络的基本构造,
  • 还用Tensorflow实现单层神经网络。
  • 本节用同样的方法来尝试将其应用到 MNIST

3.2.1 用单层神经网络的多元分类器

  • 增加了输入层中的数据量及隐藏层中的节点数,
  • 输出层也与之前不同,用Softmax
  • 后面虽然我们会设置隐藏层的节点数为1024,
    • 一般情況下还建议设置节点数为M进行计算

3 用NN分类

相关文章:

  • 2022-12-23
  • 2021-09-15
  • 2021-10-13
  • 2021-05-23
  • 2021-11-27
  • 2021-12-05
  • 2022-12-23
猜你喜欢
  • 2021-07-16
  • 2021-08-25
  • 2021-10-30
  • 2022-12-23
  • 2021-08-14
  • 2022-12-23
  • 2021-09-22
相关资源
相似解决方案