- 上一章用Softmax对手写图片分类
- 这只用第1章刚开始的图1.2中最右侧节点的部分
- 本章添加前面全连接层调用的那些节点群(见图3.1)
- 对二维平面数据为例,来确认全连接层功能
- 用Tensorflow自带的可视化工具TensorBoard对神经网络的构造
- 及参数变化进行图形化显示

3.1单层神经网络的的构成
- 本节对只添加了一个全连接层的“单层神经网络”的构成详细介绍。
- 以针对二维平面数据分类的二元分类器为例,进行具体实践和验
证确认。
- 这里用到还是在1.1.2节“神经网络的必要性”中介绍过的,
- 针对某次检査结果(x1,x2)
- 计算出其被病毒感染的概率P
3.1.1 用单层神经网络的二元分类
- 把单层神经网络模型化,会用到图3.2的形式
- 分为输入层、隐藏层和输出层三个组成部分,
- 隐藏层中会把输入数据代入到一次函数中计算并通过“**函数”转换后输出

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

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

- 这里的一次函数的参数(系数和常数)与之前我们讲到的稍有不同。
- (3.2)本质与2.1.1“用概率进行误差评价”的公式(2.1)和公式(2.3)完全相同
- 本来由这两个值决定的数据(x1,x2),通过隐藏层处理后,扩展成了由M个值组成的数据(z1,…,2)。
- 1.1.2节“神经网络的必要性”的图1.9,
- 像这样包括最后输出层的NN,称“由两层节点组成的神经网络”。
- 输入层和输出层是定要有,这里只注意隐藏层数,
- 3.3节“扩展为多层神经网络”讲两个隐藏层重叠,称“两层NN”

- 如图1.9,隐藏层的**函数使用了与输出层相同的Sigmoid
- **函数σ(x)会以x=0为边界从0~1变化的函数,
- 这就可模拟组成人脑的神经细胞中“神经元”的反应模式。
- 隐藏层输出时调用Sigmoid,就可以模拟随着输入信号变化来**神经元,并同时输出0和1信号
- 机器学习模型也并不一定要完全模拟现实中的神经元,只要有相应的输出值与输入值相对应就可以了。
- 实际中,除了Sigmoid外,还有双曲正切函数 tanh x和ReLU( Rectified Linear Unit,线性整流函数)等函数可用
- 各**函数所表示的图形的纵轴取值范围是不相同的


- 最初,Sigmoid只是因为可以对应神经元的实际操作所以被广泛采用。
- 后来发现如果**函数通过原点能够获得更好的计算效率,所以双曲正切函数也渐渐被使用
- 近来深度学习采用了多层神经网络,ReLU则可更加快速地优化参数。
- Sigmoid**函数和双曲正切函数都是随着x增大,输出值会向一个定值递增,曲线的倾斜度也逐渐趋于0。
- 计算误差函数的梯度时,如果**函数的倾斜度越小,梯度值就会随之越小,进而参数优化的计算处理就会变得越困难。
- 双曲正切函数的理论分析易理解,本章就用它来示例
- 后面说明如果把**函数换成ReLU后会有什么效果
- 3.2节“应用单层神经网络手写数字分类”对手写数字进行分类处
理时,会按照一般深度学习的惯用做法,用ReLU作为**函数。
3.1.2隐藏层的作用
- 有两个节点的隐藏层如图3.4。
- 这时隐藏层有21和2两个输出值,如下为它们的定义


- 这与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所列的取值范围


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

-
(z1,z2)就是图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所示的单层神经网络

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

- 平面(x,x2)像图3.5那样分成4区,分别为每个区域设置数据。
- 右上侧区域设置为t=1的数据,其他区域设置为t=0的数据。
- 与2.1.2节“通过 ensorflow执行最大似然估计”的[MLE-02]大致
相同的。
- 03接下来把(x1,x2)和中所保存的数据用纵向矩阵的形式全部取出来


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

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

- 公式(3.9)中用到的运算符⊕与2.3.2节“图片数据的分类算法”的公式(2.29)相同,都适用 Broadcasting机制的加法运算,
- 如果对象为函数时也会适用针对函数的 Broadcasting机制
3.2 应用单层神经网络进行手写数字分类
- 上节解決二维平面数据分类的二元分类器为例,
- 帮助我们理解单层神经网络的基本构造,
- 还用Tensorflow实现单层神经网络。
- 本节用同样的方法来尝试将其应用到 MNIST
3.2.1 用单层神经网络的多元分类器
- 增加了输入层中的数据量及隐藏层中的节点数,
- 输出层也与之前不同,用Softmax
- 后面虽然我们会设置隐藏层的节点数为1024,

相关文章:
-
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
相关资源
-
下载
2023-03-21
-
下载
2021-06-22
-
下载
2023-03-20
-
下载
2022-12-18