发现!L2正则化之美 (Implemented by Python+Numpy)

  • 本文旨在发现神经网络中,对模型的参数进行L2正则化惩罚后,模型在预测阶段的表现产生的变化。

深度神经网络

何谓神经网络

  1. 神经网络由多层感知机演化而来。
  2. 多层神经网络为了使模型学习到非线性的数据关系(映射),在层与层之间添加了非线性激活函数,提高了模型的学习能力。

何谓深度

  1. 深度即层数多。
  2. 网络结构可以设计为形如“线性+非线性+线性”等的结构。本文中的网络为: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=n1in(ytrueiyi^)2

L2正则惩罚项

公式

L o s s = L o s s ′ + 1 2 ∣ ∣ w ∣ ∣ 2 Loss = Loss' + \frac{1}{2}||w||^2 Loss=Loss+21w2

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

第三步:观察美

训练中的损失美

  1. 没有L2正则化的Loss:不带L2正则化的Loss值
  2. L2正则化后的Loss:
    L2正则化后的Loss值,Loss值还增大了?

测试中的美

  1. 不带正则化,模型明显有些过拟合(即在训练时损失很低,但测试时的损失很高):
    不带L2正则化的模型预测值与真实值的对比
  2. L2正则化后模型的预测结果:
    L2正则化的模型预测值与真实值的对比

重磅!参数w1在训练过程中的变化美:

  1. 不带L2正则化的模型,参数w1的变化过程:
    不带L2正则化的模型,参数w1的变化过程
  2. L2正则化的模型,参数w1的变化过程:
    L2正则化的模型,参数w1的变化过程
    可以见得!带有正则化惩罚后的模型:
    Ⅰ. 具有结构风险最小化的性质,即在训练集中的结果与在测试集中的结果之间的gap变小了;
    Ⅱ. 参数收敛速度明显加快!!
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值