线性:神经网络将学习更复杂的从特征到标签的映射关系。 非线性(nonlinearity):这是一种输入到输出的映射关系。非线性会增强神经网络的表示能力,使用得当会提高各种预测任务的准确率。 过拟合(overfitting)和欠拟合(underfitting):深入探讨,从而让训练模型既能在训练集上表现优异,也能在未知数据上实现高准确率,也是衡量模型质量的关键。
3.1 非线性的定义及其优势
// 为波士顿房价预测任务定义双层神经网络export function multiLayerPerceptronRegressionModel1Hidden() {const model = tf.sequential();model.add(tf.layers.dense({inputShape: [bostonData.numFeatures],units: 50,activation: 'sigmoid',kernelInitializer: 'leCunNormal' // 指定初始化核值的方式}));model.add(tf.layers.dense({units: 1})); // 添加隐藏层model.summary(); // 打印模型拓扑结构的文本报告return model;}
- 第一层拥有50个单元(神经元)的密集层,使用自定义的激活函数和核初始化器(initializer)。该层是一个隐藏层(hidden layer),其输出在模型外是不可见的。
- 第二层使用默认激活函数(线性激活函数)的密集层,其输出就是模型的最终输出,也是模型
predict()方法的返回值。
代码中对应的函数名称为多层感知机(multilayer perceptron,MLP)。 特点:
- 有一个简单的无环拓扑结构,也就是说它属于前馈神经网络(feedforward neural network)
- 至少有一个隐藏层
拓扑结构(浏览器自带的开发者工具或Nodejs的标准输出均可)如下:
- 第一列各层的名称与类型。
- 第二列各层的输出形状。(形状的第一个维度几乎总是null,代表其批次尺寸是待定且可变的)
- 第三列各层权重参数的总数。表示足层该层权重的所有参数的个数,对包含多个权重的层而言,则表示所有权重的参数的总和。例如第一层形状
[12, 50]的核,另一个是形状为[50]的偏差,该层共有650个参数。
双层模型较之前包含更多的层与权重参数,因此其训练和推断会消耗更多的算力与时间。
3.1.1 直观地理解神经网络中的非线性
激活函数表示不同元素的转换。即代码中定义的 activation: 'sigmoid' 。例如 sigmoid函数将所有实数“挤压”到一个小的多的范围(0.0~1.0)
