TensorFlow游乐场、前向传播算法简介、**函数
简介
游乐场是一个通过网页浏览器就可以训练的简单神经网络并实现了可视化训练过程的工具。
地址:http://playground.tensorflow.org
下图给出了游乐场默认设置的截图
图中内容解释:
(按着默认的配置:这明显是个二分类问题,因为点的颜色只有两种,点的颜色代表样例的标签。每一个点代表一个样例。)
DATA处提供了四个不同的数据集来测试神经网络
FEATURES处显示特征向量(假设每个样例有长度和质量两个属性,则x1就是长度,x2就是质量)
中间部分是神经网络的主体结构
按默认配置走202轮之后的结果:
对结果的解读:
每一条边就代表了神经网络中的一个参数,它可以是任意实数。神经网络就是通过对参数的合理设置来解决分类或者回归问题。
边上的颜色体现了这个参数的取值,颜色越深,参数取值的绝对值越大。
每个节点上的颜色代表了这个节点的区分平面,拿x1举例,这个节点的区分平面就是y轴,当x1<0时,节点的输出就是负值(黄色),大于零时输出为正值(蓝色)。
综上所述,使用神经网络解决分类问题主要可分为以下四步:
- 提取问题中的实体的特征向量作为神经网络的输入。
- 定义神经网络结构,并定义如何从神经网络的输入得到输出。这个过程就是前向传播算法。
- 通过训练数据来调整神经网络中参数的取值。
- 使用训练好的神经网络来调整神经网络中的参数的取值。
前向传播算法简介
**函数简介
根据前向传播算法,可以看出神经元的输出为所有输入的加权和。这就导致了整个神经网络是一个线性模型。
如果给每一个神经元的输出加上一个非线性函数,那么整个神经网络的模型也就不在是线性的了。这个非线性函数就是**函数。
在线性可分问题中,线性模型就能很好的区分不同颜色的点。如图:
深度学习的定义强调它的目的是为了解决更加复杂的问题,所谓复杂的问题,至少是无法用直线(或者是高维空间的平面)划分的。如图,用线性就分不出来:
如果换用其它**函数,ReLU,sigmoid,tanh等常用函数。
多层网络解决异或运算
之前介绍了线性变换的问题,这次了解深度学习的另外一个重要性质--多层变换。
一个没有隐藏层的神经网络不能够处理异或问题(同时为正或者负则输出0.否则输出1),加入一层隐层。则分类良好,深层网络实际上有组合特征提取的功能。图中可表示为从输入特征中抽取的更高维的特征。