《Tensorflow深度学习算法原理与编程实战》阅读笔记——5.4拟合

泛化(Generalization):训练得到的模型在未知新输入数据上表现良好的能力
泛化误差(Generalization Error)/ 测试误差(Test Error):模型在未知新输入数据上得到的误差
欠拟合(Underfitting):模型不能够在训练集上获得足够低的误差。模型容量不足难以拟合训练集时出现欠拟合。简言之,模型太简单,数据比较复杂。
过拟合(Overfitting):训练误差和测试误差之间差距太大。模型容量高于任务所需,很好地记忆了每一个训练数据中随即噪音的分布而忽略了对训练数据中通用趋势的学习时出现过拟合。简言之,模型太复杂,数据比较少。
解决过拟合方法:正则化,Bagging,Dropout。
L2范数:欧几里得范数,两点之间的欧几里得距离。
L1范数:向量中非零元素的个数。
L无穷范数,最大范数:向量中具有最大幅值的元素的绝对值。
正则化思想:在损失函数中加入被称为正则化项的惩罚。
常用的正则化方式有L1正则化(对权重参数求L1范数)和L2正则化(对权重参数求解平方L2范数)。
加入正则化项的损失函数基本思想是通过限制权重的大小,降低模型拟合训练数据中存在的噪音的概率,从而减轻过拟合。
L1正则化会让参数变得更稀疏(更多的参数变为0), L2正则化不会;L1正则化不可导,L2可导,优化时L2正则化损失函数的偏导数更简洁,L1正则化损失函数的偏导数更复杂。
实践中可以将L1正则化和L2正则化通过加权求和结合在一起使用。

# L2正则项
regularizer_l2 = tf.contrib.layers.l2_regularizer(.5)
# L1正则项
regularizer_l1 = tf.contrib.layers.l1_regularizer(.5)
#参数是正则项的权重

一个小示例:总损失函数由交叉熵损失函数和正则化损失函数组成

cross_entropy_mean = tf.reduce_mean(cross_entropy)
regularizer_l2 = tf.contrib.layers.l2_regularizer(.01)
regularization = regularizer_l2(weight1)+regularizer_l2(weight2)
loss = cross_entropy_mean+regularization

当神经网络参数增多之后,上述定义总损失的方式会导致可读性差且容易出错,尤其当定义网络结构的部分和计算总损失的部分不在同一个函数中时。解决方案:使用集合维护一组个体。
示例代码:

...
error_loss = tf.reduce_sum(tf.pow(y_-y,2))/sample_size
tf.add_to_collection("losses", error_loss)
regularizer = tf.contrib.layers.l2_regularizer(0.01)
regularization = regularizer(weight1)+regularizer(weight2)+regularizer(weight3)
tf.add_to_collection("losses", regularization)
loss = tf.add_n(tf.get_collection("losses"))
...

Bagging:分别训练几个不同的模型,之后使用相同的测试集在这些模型上测试,并收集所有模型在测试集上的输出。对应机器学习中模型平均,应用模型平均的技术成为集成方法。
Bagging允许重复多次使用同一种模型,训练算法和目标函数。通过从原始训练数据集中重复采样构造多个不同的训练数据集。
通过不同训练数据集得到的不同模型通常不会在测试集上得到完全相同的误差,这就是模型平均策略能够起作用的原因。
Dropout:在训练时将神经网络中某一层的单元(不包括输出层的单元)数据随机丢弃一部分。将该单元输出乘以0即可实现丢弃此单元的功能。
Dropout可以看作Bagging的一种,但不需要构造k个不同的训练数据集及k个不同的模型。在将样本从batch输入到网络模型中后通过随机设置某层的单元相乘数值选择丢弃哪些单元,然后运行和之前一样的前向传播,反向传播和参数更新。

tf.nn.dropout(x, dro)
#dro:x中每个元素被保留下来的概率
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值