发现:L2正则化之美
- 本文旨在发现神经网络中,对模型的参数进行L2正则化惩罚后,模型在预测阶段的表现产生的变化。
深度神经网络
何谓神经网络
- 神经网络由多层感知机演化而来。
- 多层神经网络为了使模型学习到非线性的数据关系(映射),在层与层之间添加了非线性激活函数,提高了模型的学习能力。
何谓深度
- 深度即层数多。
- 网络结构可以设计为形如“线性+非线性+线性”等的结构。本文中的网络为:Linear + Sigmoid + Linear + ReLU + Linear。
MSE损失函数
公式
L o s s ′ = 1 n ∑ i n ( y t r u e i − y i ^ ) 2 Loss' = \frac{1}{n} \sum_i^n (y_{true_i} - \hat{y_i})^2 Loss′=n1i∑n(ytruei−yi^)2
L2正则惩罚项
公式
L o s s = L o s s ′ + 1 2 ∣ ∣ w ∣ ∣ 2 Loss = Loss' + \frac{1}{2}||w||^2 Loss=Loss′+21∣∣w∣∣2
Boston房价预测
Boston房价数据封装在sklearn包中
第一步:导入数据与数据处理
features = load_boston()['feature_names']
print("botson_features: {}".format(features))
boston_x = load_boston()['data'] # 506 row 13 col
boston_y = load_boston()['target']
multi_dim_input_x, multi_dim_input_y = boston_x, boston_y
# Normalization
multi_dim_input_x = (multi_dim_input_x - np.mean(multi_dim_input_x, axis=0)) / np.std(multi_dim_input_x, axis=0)
# divide the dataset
train_num = int(boston_x.shape[0] * 0.8) # take 80% data as train_data
print("multi_dim_input_x shape: {}, multi_dim_input_y shape: {}".format(multi_dim_input_x.shape, multi_dim_input_y.shape))
train_x, test_x, train_y, test_y = multi_dim_input_x[:train_num][:], multi_dim_input_x[train_num:][:], boston_y[:train_num][:], boston_y[train_num:][:]
print('train_x shape:{}, test_xshape:{}, train_yshape:{}, test_yshape:{}'.format(train_x.shape, test_x.shape, train_y.shape, test_y.shape))
# define the feature_dim and hidden_dim
feature_dim = multi_dim_input_x.shape[1]
hidden_dim = feature_dim * 2
print("feature_dim shape: {}, hidden_dim shape: {}".format(feature_dim, hidden_dim))
输出:
botson_features: [‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’ ‘B’ ‘LSTAT’]
multi_dim_input_x shape: (506, 13),
multi_dim_input_y shape: (506,)
train_x shape: (404, 13),
test_xshape: (102, 13),
train_yshape: (404,),
test_yshape: (102,)
feature_dim shape: 13,
hidden_dim shape: 26
第二步:Python + Numpy 构造神经网络框架
这部分代码有点复杂就不放上来了,整理后会分享到github仓库上~
参数设置:
learning_rate:0.01
epoch:5000
batch_size:100
第三步:观察美
训练中的损失美
- 没有L2正则化的Loss:
- L2正则化后的Loss:
测试中的美
- 不带正则化,模型明显有些过拟合(即在训练时损失很低,但测试时的损失很高):
- L2正则化后模型的预测结果:
重磅!参数w1在训练过程中的变化美:
- 不带L2正则化的模型,参数w1的变化过程:
- L2正则化的模型,参数w1的变化过程:
可以见得!带有正则化惩罚后的模型:
Ⅰ. 具有结构风险最小化的性质,即在训练集中的结果与在测试集中的结果之间的gap变小了;
Ⅱ. 参数收敛速度明显加快!!