线性:神经网络将学习更复杂的从特征到标签的映射关系。 非线性(nonlinearity):这是一种输入到输出的映射关系。非线性会增强神经网络的表示能力,使用得当会提高各种预测任务的准确率。 过拟合(overfitting)和欠拟合(underfitting):深入探讨,从而让训练模型既能在训练集上表现优异,也能在未知数据上实现高准确率,也是衡量模型质量的关键。

3.1 非线性的定义及其优势

  1. // 为波士顿房价预测任务定义双层神经网络
  2. export function multiLayerPerceptronRegressionModel1Hidden() {
  3. const model = tf.sequential();
  4. model.add(tf.layers.dense({
  5. inputShape: [bostonData.numFeatures],
  6. units: 50,
  7. activation: 'sigmoid',
  8. kernelInitializer: 'leCunNormal' // 指定初始化核值的方式
  9. }));
  10. model.add(tf.layers.dense({units: 1})); // 添加隐藏层
  11. model.summary(); // 打印模型拓扑结构的文本报告
  12. return model;
  13. }
  • 第一层拥有50个单元(神经元)的密集层,使用自定义的激活函数和核初始化器(initializer)。该层是一个隐藏层(hidden layer),其输出在模型外是不可见的。
  • 第二层使用默认激活函数(线性激活函数)的密集层,其输出就是模型的最终输出,也是模型 predict() 方法的返回值。

代码中对应的函数名称为多层感知机(multilayer perceptron,MLP)。 特点:

  1. 有一个简单的无环拓扑结构,也就是说它属于前馈神经网络(feedforward neural network)
  2. 至少有一个隐藏层

拓扑结构(浏览器自带的开发者工具或Nodejs的标准输出均可)如下:
image.png

  1. 第一列各层的名称与类型。
  2. 第二列各层的输出形状。(形状的第一个维度几乎总是null,代表其批次尺寸是待定且可变的)
  3. 第三列各层权重参数的总数。表示足层该层权重的所有参数的个数,对包含多个权重的层而言,则表示所有权重的参数的总和。例如第一层形状 [12, 50] 的核,另一个是形状为 [50] 的偏差,该层共有650个参数 第三章 添加非线性:升级加权和 - 图2

双层模型较之前包含更多的层与权重参数,因此其训练和推断会消耗更多的算力与时间。

3.1.1 直观地理解神经网络中的非线性

激活函数表示不同元素的转换。即代码中定义的 activation: 'sigmoid' 。例如 sigmoid函数将所有实数“挤压”到一个小的多的范围(0.0~1.0)